Контрольное задание 4. Создать полный список авторов, в котором отобразить ФИО авторов, названия книг, тираж которых превысил 100 000 экз., и размер тиража. (Потребуется применить и внешнее объединение, т.к. полный список авторов, и внутреннее, т.к. авторы, названия, тираж расположены в разных таблицах.)
Самообъединение – объединение таблицы со своей копией выбирает строки в соответствии с условием объединения. Используется в таблицах с рефлексивными связями (связи между первичными и вторичными ключами).
Задание. Задана таблица стремя колонками: (КОД_СОТР, ФАМИЛИЯ_СОТР, КОД_НАЧАЛЬНИКА). Построить запрос, содержащий список сотрудников и их начальников.
Можно объединить таблицу с самой собой и случаях, когда нет рефлексивных связей. Обычно сравнивают столбец первой копии с тем же столбцом второй копии.
Пример. Получить список авторов (их кодов, городов), проживающих в том же штате, что и автор с кодом ao6. (запрос SELF-Authors-STATE)
SELECT
a1.au_id, a1.au_fname, a1.au_lname, a1.state, a1.city
FROM authors AS a1
INNER JOIN authors AS a2 ON a1.state = a2.state
WHERE a2.au_id='a06';
Пример. Преобразовать самообъединение в подзапрос. (запрос SELF-Authors-STATE#SubRequest)
SELECT
au_id, au_fname, au_lname, state, city
FROM authors WHERE state IN
(SELECT state FROM authors WHERE au_id='a06');
Задание. Для каждой книги отобразить список книг, которые продаются лучше. (запрос SELF-Authors-STATE#SubRequest)
Пример. Для каждой книги-биографии отобразить книги, пользующиеся большим спросом. (запрос Book-ListMoreSales)
SELECT
t1.title_id, t1.sales,
t2.title_id AS "BestBook", t2.sales AS "HighSale"
FROM title t1
INNER JOIN title t2
ON t1.sales < t2.sales
WHERE t1.type = 'biography' AND t2.type = 'biography'
ORDER BY t1.title_id, t2.sales
Контрольное задание 5. Преобразовать запрос так, чтобы отображались названия книг из 1-й таблицы, группировать по категориям, для каждой книги перечислять не весь список книг с большим рейтингом продаж, а только минимальную и максимальную величину продаж из этого списка.
Оператор UNION применяется для комбинирования результатов двух запросов в один результат. Оператор объединяет строки запросов (оператор SELECT комбинирует столбцами). В процессе объединения по умолчанию удаляются дубликаты, поэтому для их сохранения следует применять конструкцию ALL.
Команда объединения запросов имеет следующую структуру:
SELECT-оператор
UNION [ALL]
SELECT-оператор
Списки столбцов в командах SELECT должны содержать одинаковое число столбцов. Соответствующие столбцы обоих запросах должны перечисляться в одинаковом порядке. Названия соответствующих столбцов могут совпадать. Тогда результат будет иметь столбец с тем же названием. В противном случае, как правило, используется название столбца из первого запроса. Чтобы переименовать столбец, следует использовать конструкцию AS в первом запросе.
Для группировки строк результата применяется конструкция ORDER BY, которая помещается в конец фразы команды UNION. Рекомендуется ссылаться при сортировке на порядковые номера столбцов. Сортировка может выполняться и по умолчанию, т.к. СУБД идентифицирует повторяющиеся строки (внутренняя сортировка не выполняется в случае UNION ALL).
Инструкции группирования GROUP BY и отбора групп HAVING можно применять в каждом запросе. Нельзя группировать итоговые данные после объединения запросов.
Пример. Список штатов, где проживают авторы и расположены издательства. (запрос List-State)
SELECT state FROM authors
UNION
SELECT state FROM Publisher;
Можно в одном столбце объединить и разные по содержанию (но одинаковые по типу данные). Тогда обычно включают дополнительный столбец, чтобы идентифицировать из какого запроса были включены данные.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.