игра брюс 2048
Главная / Базы данных / Введение в модель данных SQL / Тест 4

Введение в модель данных SQL - тест 4

Упражнение 1:
Номер 1

База данных АВТОРЫ-КНИГИ-ИЗДАТЕЛЬСТВА (AUTHORS-BOOKS-PUBLISHERS) состоит из следующих таблиц:

AUTHORS
AUTHOR_ID : INTEGER
AUTHOR_NAME : VARCHAR (20)
AUTHOR_BDATE : DATE
AUTHOR_ADDRESS : VARCHAR (40)
AUTHOR_PICTURE : BLOB

AUTHORS-BOOKS
ISBN : VARCHAR (20)
AUTHOR_ID : INTEGER

BOOKS
ISBN : VARCHAR (20)
TITLE : VARCHAR (30)
PUB_ID : INTEGER
DATE_OF_AGREEMENT : DATE
AGREEMENT_DURAT : INTERVAL
DATE_OF_PUB : DATE
PRICE : MONEY
NUMBER_OF_PAGES : SMALLINT
COVER_PICTURE : BLOB
DESCR : CLOB

PUBLISHERS
PUB_ID : INTEGER
PUB_NAME : VARCHAR (20)
PUB_ADDRESS : VARCHAR (40)

Автор уникально идентифицируется своим идентификатором AUTHOR_ID. Уникальным идентификатором книги является ISBN (как выглядит ISBN, можно посмотреть в выходных данных любой книги). Издательство идентифицируется уникальным идентификатором PUB_ID. В таблицах AUTHORS, BOOKS и PUBLISHERS столбцы AUTHOR_ID, ISBN и PUB_ID соответственно являются первичными ключами. В таблице AUTHORS-BOOKS столбцы AUTHOR_ID и ISBN являются внешними ключами, ссылающимися на первичные ключи таблиц AUTHORS и BOOKS соответственно. В таблице BOOKS столбец PUB_ID является внешним ключом, ссылающимся на первичный ключ таблицы PUBLISHERS.

У каждой книги могут быть один или несколько авторов. Допускается, что авторы книги временно неизвестны. В таблице авторов могут содержаться данные только об авторах книг, описываемых в таблице BOOKS. Каждая книга может быть издана только одним издательством, но для некоторых книг издательство может быть временно неизвестно. Столбец DATE_OF_AGREEMENT содержит дату заключения договора на написание книги между автором и издательством. Столбец AGREEMENT_DURAT содержит временной интервал, в течение которого действует договор. Столбец DATE_OF_PUB содержит даты публикации книг.

Требуется сформулировать запрос "Найти имена авторов, издавших более 10 книг, включая разные издания книги с одним и тем же названием". Какие из приведенных ниже формулировок являются правильными?


Ответ:

 (1) SELECT AUTHOR_NAME FROM AUTHORS WHERE (SELECT COUNT (*) FROM AUTHORS-BOOKS, BOOKS WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN) > 10;  

 (2) SELECT AUTHOR_NAME FROM AUTHORS WHERE (SELECT COUNT (*) FROM AUTHORS-BOOKS WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID) > 10;  

 (3) SELECT DISTINCT AUTHOR_NAME FROM AUTHORS, AUTHORS-BOOKS WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND COUNT (ISBN) > 10;  


Номер 2

База данных АВТОРЫ-КНИГИ-ИЗДАТЕЛЬСТВА (AUTHORS-BOOKS-PUBLISHERS) состоит из следующих таблиц:

AUTHORS
AUTHOR_ID : INTEGER
AUTHOR_NAME : VARCHAR (20)
AUTHOR_BDATE : DATE
AUTHOR_ADDRESS : VARCHAR (40)
AUTHOR_PICTURE : BLOB

AUTHORS-BOOKS
ISBN : VARCHAR (20)
AUTHOR_ID : INTEGER

BOOKS
ISBN : VARCHAR (20)
TITLE : VARCHAR (30)
PUB_ID : INTEGER
DATE_OF_AGREEMENT : DATE
AGREEMENT_DURAT : INTERVAL
DATE_OF_PUB : DATE
PRICE : MONEY
NUMBER_OF_PAGES : SMALLINT
COVER_PICTURE : BLOB
DESCR : CLOB

PUBLISHERS
PUB_ID : INTEGER
PUB_NAME : VARCHAR (20)
PUB_ADDRESS : VARCHAR (40)

Автор уникально идентифицируется своим идентификатором AUTHOR_ID. Уникальным идентификатором книги является ISBN (как выглядит ISBN, можно посмотреть в выходных данных любой книги). Издательство идентифицируется уникальным идентификатором PUB_ID. В таблицах AUTHORS, BOOKS и PUBLISHERS столбцы AUTHOR_ID, ISBN и PUB_ID соответственно являются первичными ключами. В таблице AUTHORS-BOOKS столбцы AUTHOR_ID и ISBN являются внешними ключами, ссылающимися на первичные ключи таблиц AUTHORS и BOOKS соответственно. В таблице BOOKS столбец PUB_ID является внешним ключом, ссылающимся на первичный ключ таблицы PUBLISHERS.

У каждой книги могут быть один или несколько авторов. Допускается, что авторы книги временно неизвестны. В таблице авторов могут содержаться данные только об авторах книг, описываемых в таблице BOOKS. Каждая книга может быть издана только одним издательством, но для некоторых книг издательство может быть временно неизвестно. Столбец DATE_OF_AGREEMENT содержит дату заключения договора на написание книги между автором и издательством. Столбец AGREEMENT_DURAT содержит временной интервал, в течение которого действует договор. Столбец DATE_OF_PUB содержит даты публикации книг.

Требуется сформулировать запрос "Найти названия издательств, в которых издавались книги Кристофера Дейта (Chris Date)". Какие из приведенных ниже формулировок являются правильными?


Ответ:

 (1) SELECT PUB_NAME FROM PUBLISHERS, AUTHORS WHERE AUTHOR_NAME = ‘Chris Date’;  

 (2) SELECT DISTINCT PUB_NAME FROM PUBLISHERS, BOOKS, AUTHORS_BOOKS, AUTHORS WHERE AUTHOR_NAME = ‘Chris Date’ AND PUBLISHERS.PUB_ID = BOOKS.PUB_ID AND BOOKS_ISBN = AUTHORS_BOOKS.ISBN;  

 (3) SELECT DISTINCT PUB_NAME FROM PUBLISHERS, BOOKS, AUTHORS_BOOKS, AUTHORS WHERE AUTHOR_NAME = ‘Chris Date’ AND PUBLISHERS.PUB_ID = BOOKS.PUB_ID AND BOOKS.ISBN = AUTHORS_BOOKS.ISBN AND BOOKS.AUTHOR_ID = AUTHORS.AUTHOR_ID;  


Номер 3

База данных АВТОРЫ-КНИГИ-ИЗДАТЕЛЬСТВА (AUTHORS-BOOKS-PUBLISHERS) состоит из следующих таблиц:

AUTHORS
AUTHOR_ID : INTEGER
AUTHOR_NAME : VARCHAR (20)
AUTHOR_BDATE : DATE
AUTHOR_ADDRESS : VARCHAR (40)
AUTHOR_PICTURE : BLOB

AUTHORS-BOOKS
ISBN : VARCHAR (20)
AUTHOR_ID : INTEGER

BOOKS
ISBN : VARCHAR (20)
TITLE : VARCHAR (30)
PUB_ID : INTEGER
DATE_OF_AGREEMENT : DATE
AGREEMENT_DURAT : INTERVAL
DATE_OF_PUB : DATE
PRICE : MONEY
NUMBER_OF_PAGES : SMALLINT
COVER_PICTURE : BLOB
DESCR : CLOB

PUBLISHERS
PUB_ID : INTEGER
PUB_NAME : VARCHAR (20)
PUB_ADDRESS : VARCHAR (40)

Автор уникально идентифицируется своим идентификатором AUTHOR_ID. Уникальным идентификатором книги является ISBN (как выглядит ISBN, можно посмотреть в выходных данных любой книги). Издательство идентифицируется уникальным идентификатором PUB_ID. В таблицах AUTHORS, BOOKS и PUBLISHERS столбцы AUTHOR_ID, ISBN и PUB_ID соответственно являются первичными ключами. В таблице AUTHORS-BOOKS столбцы AUTHOR_ID и ISBN являются внешними ключами, ссылающимися на первичные ключи таблиц AUTHORS и BOOKS соответственно. В таблице BOOKS столбец PUB_ID является внешним ключом, ссылающимся на первичный ключ таблицы PUBLISHERS.

У каждой книги могут быть один или несколько авторов. Допускается, что авторы книги временно неизвестны. В таблице авторов могут содержаться данные только об авторах книг, описываемых в таблице BOOKS. Каждая книга может быть издана только одним издательством, но для некоторых книг издательство может быть временно неизвестно. Столбец DATE_OF_AGREEMENT содержит дату заключения договора на написание книги между автором и издательством. Столбец AGREEMENT_DURAT содержит временной интервал, в течение которого действует договор. Столбец DATE_OF_PUB содержит даты публикации книг.

Требуется сформулировать запрос "Найти ISBN и имена авторов книг, в название которых входит хотя бы одна цифра". Какие из приведенных ниже формулировок являются правильными?


Ответ:

 (1) SELECT BOOKS.ISBN, AUTHOR_NAME FROM AUTHORS, AUTHORS-BOOKS, BOOKS WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND TITLE SIMILAR ‘%[:DIGIT:]%’;  

 (2) SELECT BOOKS.ISBN, AUTHOR_NAME FROM AUTHORS, AUTHORS-BOOKS, BOOKS WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND TITLE SIMILAR ‘(%0%)|(%1%)|(%2%)|(%3%)|(%4%)| (%5%)|(%6%)|(%7%)|(%8%)|(%9%)’;  

 (3) SELECT BOOKS.ISBN, AUTHOR_NAME FROM AUTHORS, AUTHORS-BOOKS, BOOKS WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND TITLE SIMILAR ‘%[:ALNUM:][^A-Z]*%’;  


Упражнение 2:
Номер 1
Требуется сформулировать запрос “Найти имена авторов, книги которых издавались в издательствах Addison-Wesley, Morgan Kauffman и O’Reilly”. Какие из приведенных ниже формулировок являются правильными?

Ответ:

 (1) SELECT AUTHOR_NAME FROM AUTHORS, AUTHORS-BOOKS, BOOKS, PUBLISHERS WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND BOOKS.PUB_ID = PUBLISHERS.PUB_ID AND (PUB_NAME = ‘Addison-Wesley’ OR PUB_NAME = ‘Morgan Kauffman’ OR PUB_NAME = ‘O’Reilly’);  

 (2) SELECT DISTINCT AUTHORS.AUTHOR_NAME FROM AUTHORS, AUTHORS-BOOKS, BOOKS, PUBLISHERS WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND BOOKS.PUB_ID = PUBLISHERS.PUB_ID AND PUB.PUB_NAME IN (“Addison-Wesley”, “Morgan Kauffman”, “O’Reilly”);  

 (3) SELECT DISTINCT AUTHOR_NAME FROM AUTHORS, AUTHORS-BOOKS, BOOKS, PUBLISHERS WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND BOOKS.PUB_ID = PUBLISHERS.PUB_ID AND PUB_NAME = ‘Addison-Wesley’ AND PUB_NAME = ‘Morgan Kauffman’ AND PUB_NAME = “O’Reilly”;  


Номер 2
Требуется сформулировать запрос “Найти имена авторов, в название книг которых входит название издательства, в котором издавалась соответствующая книга”. Какие из приведенных ниже формулировок являются правильными?

Ответ:

 (1) SELECT DISTINCT AUTHOR_NAME FROM AUTHORS, AUTHORS-BOOKS, BOOKS, PUBLISHERS WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND BOOKS.PUB_ID = PUBLISHERS.PUB_ID AND BOOKS.TITLE LIKE ‘%’ || PUBLISHERS.PUB_NAME || ‘%’;  

 (2) SELECT AUTHOR_NAME FROM AUTHORS, AUTHORS-BOOKS, BOOKS, PUBLISHERS WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND BOOKS.PUB_ID = PUBLISHERS.PUB_ID AND BOOKS.TITLE LIKE ‘%PUBLISHERS.PUB_NAME%’;  

 (3) SELECT DISTINCT AUTHOR_NAME FROM AUTHORS, AUTHORS-BOOKS, BOOKS, PUBLISHERS WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND BOOKS.PUB_ID = PUBLISHERS.PUB_ID AND BOOKS.TITLE LIKE ‘_’ || PUBLISHERS.PUB_NAME || ‘_’;  


Номер 3
Требуется сформулировать запрос “Найти имена авторов, книги которых никогда не публиковались издательствами, издававшими книги Дейта”. Какие из приведенных ниже формулировок являются правильными?

Ответ:

 (1) SELECT DISTINCT AUTHOR_NAME FROM AUTHORS, AUTHORS-BOOKS, BOOKS, PUBLISHERS WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND BOOKS.PUB_ID = PUBLISHERS.PUB_ID AND PUBLISHERS.PUB_ID NOT IN (SELECT PUBLISHERS.PUB_ID FROM AUTHORS, AUTHORS-BOOKS, BOOKS, PUBLISHERS) WHERE AUTHORS.AUTHOR_NAME = ‘Chris Date’ AND AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND BOOKS.PUB_ID = PUBLISHERS.PUB_ID);  

 (2) SELECT DISTINCT AUTHOR_NAME FROM AUTHORS, AUTHORS AUTHORS1, AUTHORS-BOOKS AUTHORS-BOOKS1, BOOKS, BOOKS BOOKS1, PUBLISHERS PUBLISHERS1 WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND BOOKS.PUB_ID = PUBLISHERS.PUB_ID AND PUBLISHERS.PUB_ID <> PUBLISHERS1.PUB_ID AND AUTHORS1.AUTHOR_NAME = ‘Chris Date’ AND AUTHORS1.AUTHOR_ID = AUTHORS-BOOKS1.AUTHOR_ID AND AUTHORS-BOOKS1.ISBN = BOOKS1.ISBN AND BOOKS1.PUB_ID = PUBLISHERS1.PUB_ID);  

 (3) SELECT AUTHOR_NAME FROM AUTHORS WHERE AUTHOR_ID NOT IN (SELECT AUTHOR_ID FROM AUTHORS-BOOKS, BOOKS, PUBLISHERS WHERE AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND BOOKS.PUB_ID = PUBLISHERS.PUB_ID AND PUBLISHERS.PUB_ID IN (SELECT PUBLISHERS.PUB_ID FROM AUTHORS, AUTHORS-BOOKS, BOOKS, PUBLISHERS) WHERE AUTHORS.AUTHOR_NAME = ‘Chris Date’ AND AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND BOOKS.PUB_ID = PUBLISHERS.PUB_ID));  


Упражнение 3:
Номер 1
Требуется сформулировать запрос “Найти общее число книг, изданных в 2002 г. издательствами, которые когда-либо издавали книги Дейта”. Какие из приведенных ниже формулировок являются правильными?

Ответ:

 (1) SELECT COUNT (BOOKS.ISBN) FROM BOOKS, PUBLISHERS WHERE BOOKS.PUB_ID = PUBLISHERS.PUB_ID AND EXTRACT (YEAR FROM BOOKS.DATE_OF_PUB) = 2002 AND PUBLISHERS.PUB_ID IN (SELECT PUB_ID FROM AUTHORS, AUTHORS-BOOKS, BOOKS, PUBLISHERS WHERE AUTHORS.AUTHOR_NAME = ‘Chris Date’ AND AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND BOOKS.PUB_ID = PUBLISHERS.PUB_ID);  

 (2) SELECT COUNT (DISTINCT BOOKS.ISBN) FROM BOOKS, BOOKS BOOKS1, PUBLISHERS, PUBLISHERS PUBLISHERS1, AUTHORS, AUTHORS-BOOKS WHERE BOOKS.PUB_ID = PUBLISHERS.PUB_ID AND EXTRACT (YEAR FROM BOOKS.DATE_OF_PUB) = 2002 AND PUBLISHERS.PUB_ID = PUBLISHERS1.PUB_ID AND AUTHORS.AUTHOR_NAME = ‘Chris Date’ AND AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS1.ISBN AND BOOKS1.PUB_ID = PUBLISHERS1.PUB_ID;  

 (3) SELECT COUNT (DISTINCT BOOKS.ISBN) FROM BOOKS, PUBLISHERS, AUTHORS, AUTHORS-BOOKS WHERE BOOKS.PUB_ID = PUBLISHERS.PUB_ID AND EXTRACT (YEAR FROM BOORS.DATE_OF_PUB) = 2002 AND AUTHORS.AUTHOR_NAME = ‘Chris Date’ AND AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND BOOKS.PUB_ID = PUBLISHERS.PUB_ID;  


Номер 2
Требуется сформулировать запрос “Найти ISBN и имена авторов книг, в название которых входит термин DBMS, но не входят термины database и data base”. Какие из приведенных ниже формулировок являются правильными?

Ответ:

 (1) SELECT BOOKS.ISBN, AUTHOR_NAME FROM AUTHORS, AUTHORS-BOOKS, BOOKS WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND BOOKS.TITLE LIKE ‘%DBMS%’ AND BOOKS.TITLE NOT LIKE ‘%database%’ AND BOOKS.TITLE NOT LIKE ‘%data base%’;  

 (2) SELECT ISBN, AUTHOR_NAME FROM AUTHORS, AUTHORS-BOOKS WHERE ISBN IN (SELECT ISBN FROM BOOKS WHERE TITLE LIKE ‘%DBMS%’ AND TITLE NOT LIKE ‘%database%’ AND TITLE NOT LIKE ‘%data base%’);  

 (3) SELECT DISTINCT BOOKS.ISBN, AUTHOR_NAME FROM AUTHORS, AUTHORS-BOOKS, BOOKS WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND BOOKS.TITLE LIKE ‘%DBMS%’ AND BOOKS.TITLE NOT LIKE ‘%data%base%’;  


Номер 3
Требуется сформулировать запрос “Найти имена авторов, которые издали не больше книг, чем автор Smith, но не меньше, чем автор Brown”. Какие из приведенных ниже формулировок являются правильными?

Ответ:

 (1) SELECT AUTHOR_NAME FROM AUTHORS WHERE (SELECT COUNT (ISBN) FROM AUTHORS-BOOKS WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID) BETWEEN (SELECT COUNT (ISBN) FROM AUTHORS, AUTHORS-BOOKS WHERE AUTHORS.AUTHOR_NAME = ‘Brown’) AND (SELECT COUNT (ISBN) FROM AUTHORS, AUTHORS-BOOKS WHERE AUTHORS.AUTHOR_NAME = ‘Smith’);  

 (2) SELECT AUTHOR_NAME FROM AUTHORS, AUTHORS-BOOKS WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND COUNT (ISBN) BETWEEN (SELECT COUNT (ISBN) FROM AUTHORS, AUTHORS-BOOKS WHERE AUTHORS.AUTHOR_NAME = ‘Brown’) AND (SELECT COUNT (ISBN) FROM AUTHORS, AUTHORS-BOOKS WHERE AUTHORS.AUTHOR_NAME = ‘Smith’);  

 (3) SELECT AUTHOR_NAME FROM AUTHORS WHERE (SELECT COUNT (ISBN) FROM AUTHORS-BOOKS WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID) BETWEEN (SELECT COUNT (ISBN) FROM AUTHORS, AUTHORS-BOOKS WHERE AUTHORS.AUTHOR_NAME = ‘Brown’ AND AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID) AND (SELECT COUNT (ISBN) FROM AUTHORS, AUTHORS-BOOKS WHERE AUTHORS.AUTHOR_NAME = ‘Smith’ AND AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID);  


Упражнение 4:
Номер 1
Требуется сформулировать запрос “Найти названия издательств и имена авторов, которые опубликовали в данном издательстве самую дорогую книгу”. Какие из приведенных ниже формулировок являются правильными?

Ответ:

 (1) SELECT PUBLISHERS.PUB_NAME, AUTHOR_NAME FROM AUTHORS, AUTHORS-BOOKS, BOOKS, BOOKS BOOKS1, PUBLISHERS, PUBLISHERS PUBLISHERS1 WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND BOOKS.PUB_ID = PUBLISHERS.PUB_ID AND BOOKS.PRICE > BOOKS1.PRICE AND BOOKS1.PUB_ID = PUBLISHERS.PUB_ID AND BOOKS1.PUB_ID = PUBLISHERS1.PUB_ID  

 (2) SELECT PUBLISHERS.PUB_NAME, AUTHOR_NAME FROM AUTHORS, AUTHORS-BOOKS, BOOKS, PUBLISHERS WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND BOOKS.PUB_ID = PUBLISHERS.PUB_ID AND BOOKS.PRICE = (SELECT MAX (BOOKS1.PRICE) FROM BOOKS BOOKS1, PUBLISHERS PUBLISHERS1 WHERE BOOKS1.PUB_ID = PUBLISHERS1.PUB_ID AND PUBLISHERS1.PUB_ID = PUBLISHERS.PUB_ID);  

 (3) SELECT PUBLISHERS.PUB_NAME, AUTHOR_NAME FROM AUTHORS, AUTHORS-BOOKS, BOOKS, PUBLISHERS WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND BOOKS.PUB_ID = PUBLISHERS.PUB_ID AND NOT EXISTS (SELECT * FROM BOOKS BOOKS1, PUBLISHERS PUBLISHERS1 WHERE BOOKS1.PUB_ID = PUBLISHERS1.PUB_ID AND PUBLISHERS1.PUB_ID = PUBLISHERS.PUB_ID AND BOOKS1.PRICE > BOOKS.PRICE);  


Номер 2
Требуется сформулировать запрос “Найти названия издательств, издававших книги хотя бы одного автора из Москвы”. Какие из приведенных ниже формулировок являются правильными?

Ответ:

 (1) SELECT PUB_NAME FROM PUBLISHERS, WHERE EXISTS (SELECT * FROM AUTHORS, AUTHORS-BOOKS, BOOKS, PUBLISHERS PUBLISHERS1 WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND BOOKS.PUB_ID = PUBLISHERS.PUB_ID AND PUBLISHERS1.PUB_ID = PUBLISHERS.PUB_ID AND AUTHOR.ADDRESS LIKE ‘%Moscow%’);  

 (2) SELECT PUB_NAME FROM PUBLISHERS, WHERE (SELECT COUNT (AUTHOR.AUTHOR_ID) FROM AUTHORS, AUTHORS-BOOKS, BOOKS, PUBLISHERS PUBLISHERS1 WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND BOOKS.PUB_ID = PUBLISHERS.PUB_ID AND PUBLISHERS1.PUB_ID = PUBLISHERS.PUB_ID AND AUTHORS.ADDRESS LIKE ‘%Moscow%’) >= 1;  

 (3) SELECT PUBLISHERS.PUB_NAME FROM AUTHORS, AUTHORS-BOOKS, BOOKS, PUBLISHERS WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND AUTHORS.ADDRESS LIKE ‘%Moscow%’;  


Номер 3
Требуется сформулировать запрос “Найти ISBN всех книг, написанных не Дейтом, названия которых совпадают с названием какой-либо книги Дейта”. Какие из приведенных ниже формулировок являются правильными?

Ответ:

 (1) SELECT DISTINCT BOOKS.ISBN FROM AUTHORS, AUTHORS-BOOKS, BOOKS WHERE AUTHORS.AUTHOR_NAME <> ‘Chris Date’ AND AUTHOR.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND BOOKS.TITLE = SOME (SELECT BOOKS.TITLE FROM AUTHORS, AUTHORS-BOOKS, BOOKS WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND AUTHORS.AUTHOR_NAME = ‘Chris Date’);  

 (2) SELECT DISTINCT BOOKS.ISBN FROM AUTHORS, AUTHORS AUTHORS1, BOOKS, BOOKS BOOKS1, AUTHORS-BOOKS, AUTHORS-BOOKS1 WHERE AUTHORS.AUTHOR_NAME <> ‘Chris Date’ AND AUTHORS1.AUTHOR_NAME = ‘Chris Date’ AND AUTHOR.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHOR1.AUTHOR_ID = AUTHORS-BOOKS1.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND AUTHORS-BOOKS1.ISBN = BOOKS1.ISBN AND BOOKS.TITLE = BOOKS1.TITLE;  

 (3) SELECT ISBN FROM BOOKS WHERE ISBN IN (SELECT BOOKS.ISBN FROM AUTHORS, AUTHORS-BOOKS, BOOKS WHERE AUTHORS.AUTHOR_NAME <> ‘Chris Date’ AND AUTHOR.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN) AND TITLE IN (SELECT BOOKS.TITLE FROM AUTHORS, AUTHORS-BOOKS, BOOKS WHERE AUTHORS.AUTHOR_NAME = ‘Chris Date’ AND AUTHOR.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN);  


Упражнение 5:
Номер 1
Требуется сформулировать запрос “Найти названия книг, опубликованных Кристофером Дейтом в издательствах, которые в течение последнего года выпустили книги, суммарная цена которых превышает 100000.00”. Какие из приведенных ниже формулировок являются правильными?

Ответ:

 (1) SELECT TITLE FROM AUTHORS, AUTHORS-BOOKS, BOOKS, PUBLISHERS WHERE AUTHOR_NAME = ‘Chris Date’ AND AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND BOOKS.PUB_ID = PUBLISHERS.PUB_ID AND PUBLISHERS.PUB_ID IN (SELECT PUBLISHERS1.PUB_ID FROM PUBLISHERS PUBLISHERS1 WHERE (SELECT SUM (PRICE) FROM BOOKS WHERE BOOKS.PUB_ID = PUBLISHERS1.PUB_ID AND DATE_OF_PUB – CURRENT_DATE <= INTERVAL ‘1’ YEAR) >= 100000.00);  

 (2) SELECT TITLE FROM AUTHORS, AUTHORS-BOOKS, BOOKS, PUBLISHERS WHERE AUTHOR_NAME = ‘Chris Date’ AND AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND BOOKS.PUB_ID = PUBLISHERS.PUB_ID AND PUBLISHERS.PUB_ID = (SELECT PUBLISHERS1.PUB_ID FROM PUBLISHERS PUBLISHERS1 WHERE PUBLISHERS1.PUB_ID = PUBLISHERS.PUB_ID AND (SELECT SUM (PRICE) FROM BOOKS WHERE BOOKS.PUB_ID = PUBLISHERS1.PUB_ID AND DATE_OF_PUB – CURRENT_DATE <= INTERVAL ‘1’ YEAR) >= 100000.00);  

 (3) SELECT TITLE FROM AUTHORS, AUTHORS-BOOKS, BOOKS, PUBLISHERS WHERE AUTHOR_NAME = ‘Chris Date’ AND AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND AUTHORS-BOOKS.ISBN = BOOKS.ISBN AND BOOKS.PUB_ID = PUBLISHERS.PUB_ID AND EXISTS (SELECT PUBLISHERS1.PUB_ID FROM PUBLISHERS PUBLISHERS1 WHERE (SELECT SUM (PRICE) FROM BOOKS WHERE BOOKS.PUB_ID = PUBLISHERS1.PUB_ID AND DATE_OF_PUB – CURRENT_DATE <= INTERVAL ‘1’ YEAR) >= 100000.00);  


Номер 2
Требуется сформулировать запрос “Найти имена всех соавторов Дейта”. Какие из приведенных ниже формулировок являются правильными?

Ответ:

 (1) SELECT AUTHOR_NAME FROM AUTHORS, AUTHORS-BOOKS WHERE AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND EXISTS (SELECT * FROM AUTHORS, AUTHORS-BOOKS AUTHORS-BOOKS1 WHERE AUTHORS-BOOKS1.ISBN = AUTHORS-BOOKS.ISBN AND AUTHORS-BOOKS1.AUTHOR_ID = AUTHORS.AUTHOR_ID AND AUTHOR_NAME = ‘Chris Date’);  

 (2) SELECT DISTINCT AUTHOR_NAME FROM AUTHORS, AUTHORS-BOOKS WHERE AUTHOR_NAME <> ‘Chris Date’ AND AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND EXISTS (SELECT * FROM AUTHORS, AUTHORS-BOOKS AUTHORS-BOOKS1 WHERE AUTHORS-BOOKS1.ISBN = AUTHORS-BOOKS.ISBN AND AUTHORS-BOOKS1.AUTHOR_ID = AUTHORS.AUTHOR_ID AND AUTHOR_NAME = ‘Chris Date’);  

 (3) SELECT DISTINCT AUTHOR_NAME FROM AUTHORS, AUTHORS-BOOKS WHERE AUTHOR_NAME = ‘Chris Date’ AND AUTHORS.AUTHOR_ID = AUTHORS-BOOKS.AUTHOR_ID AND EXISTS (SELECT * FROM AUTHORS, AUTHORS-BOOKS AUTHORS-BOOKS1 WHERE AUTHORS-BOOKS1.ISBN = AUTHORS-BOOKS.ISBN AND AUTHORS-BOOKS1.AUTHOR_ID = AUTHORS.AUTHOR_ID AND AUTHOR_NAME <> ‘Chris Date’);  


Номер 3
Требуется сформулировать запрос “Найти названия издательств, в которых Кристофер Дейт издал хотя бы одну книгу объемом меньше 300 страниц”. Какие из приведенных ниже формулировок являются правильными?

Ответ:

 (1) SELECT PUB_NAME FROM PUBLISHERS WHERE EXISTS (SELECT * FROM AUTHORS, AUTHORS-BOOKS, BOOKS WHERE BOOKS.PUB_ID = PUBLISHERS.PUB_ID AND BOOKS.ISBN = AUTHORS-BOOKS.ISBN AND AUTHORS-BOOKS.AUTHOR_ID = AUTHORS.AUTHOR_ID AND AUTHORS.AUTHOR_NAME = ‘Chris Date’ AND BOOKS.NUMBER_OF_PAGES < 300);  

 (2) SELECT PUB_NAME FROM PUBLISHERS WHERE (SELECT MIN (NUMBER_OF_PAGES) FROM AUTHORS, AUTHORS-BOOKS, BOOKS WHERE BOOKS.PUB_ID = PUBLISHERS.PUB_ID AND BOOKS.ISBN = AUTHORS-BOOKS.ISBN AND AUTHORS-BOOKS.AUTHOR_ID = AUTHORS.AUTHOR_ID AND AUTHORS.AUTHOR_NAME = ‘Chris Date’) < 300;  

 (3) SELECT PUB_NAME FROM PUBLISHERS, AUTHORS, AUTHORS-BOOKS, BOOKS WHERE BOOKS.PUB_ID = PUBLISHERS.PUB_ID AND BOOKS.ISBN = AUTHORS-BOOKS.ISBN AND AUTHORS-BOOKS.AUTHOR_ID = AUTHORS.AUTHOR_ID AND AUTHORS.AUTHOR_NAME = ‘Chris Date’ AND BOOKS.NUMBER_OF_PAGES < 300);  




Главная / Базы данных / Введение в модель данных SQL / Тест 4