Главная / Базы данных /
Введение в модель данных 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);