SQL UNION страница 2
Назад<<< | Содержание | Вперёд>>> |
Объединение результатов запросов к двум таблицам с помощью оператора SQL UNION
До сих пор мы рассматривали запросы с оператором UNION, в которых объединялись результаты из одной таблицы. Теперь будем объединять результаты из двух таблиц.
Пример 6. Есть база данных склада строительных материалов. В ней есть таблицы, содержащая данные об обоях. Таблица Vinil содержит данные о виниловых обоях, таблица Paper - о бумажных обоях. Требуется узнать данные о ценах обоев из одной и другой таблицы.
Чтобы извлечь не повторяющиеся данные о ценах на виниловые обои, составим запрос со словом DISTINCT:
Результатом выполнения запроса будет следующая таблица:
Price |
400 |
500 |
530 |
610 |
720 |
800 |
850 |
Чтобы извлечь не повторяющиеся данные о ценах на бумажные обои, составим следующий запрос, также со словом DISTINCT:
Результатом выполнения запроса будет следующая таблица:
Price |
300 |
320 |
360 |
400 |
430 |
500 |
530 |
Теперь составим объединённый запрос с оператором UNION:
Так как мы не используем слово ALL, дубликаты значений 400, 500 и 530 выводиться не будут. Результатом выполнения запроса будет следующая таблица:
Price |
300 |
320 |
360 |
400 |
430 |
500 |
530 |
610 |
720 |
800 |
850 |
Пример 7. База данных и таблицы - те же, что и в предыдущем примере.
Требуется получить все данные о ценах, в том числе повторяющиеся. Запрос на объединение результатов с использованием оператора UNION будет аналогичен запросу в предыдущем примере, но вместо просто UNION пишем UNION ALL:
Результатом выполнения запроса будет следующая таблица:
Price |
300 |
320 |
360 |
400 |
400 |
430 |
500 |
500 |
530 |
530 |
610 |
720 |
800 |
850 |
При помощи оператора SQL UNION можно объединить как простые запросы, так и запросы, содержащие подзапросы (вложенные запросы). Рассмотрим соответствующий пример.
Пример 8. Есть база данных "Театр". В её таблице Play содержатся данные о постановках (названия - в столбце Name), в таблице Director - даные о режиссёрах (в столбце Fname - имя, в столбце Lname - фамилия). Первичный ключ таблицы Director - dir_id - идентификационный номер режиссёра. Dir_id также - внешний ключ таблицы Play, он ссылается на первичный ключ таблицы Director. Требуется вывести спектакли режиссеров John Barton и Trevor Nunn.
Решение. Объединим результаты двух запросов - один возвращает спектакли режиссёра John Barton, другой - режиссёра Trevor Nunn. А каждый из этих объединяемых запросов к таблице Play делаем с подзапросом к таблице Director, который возвращает dir_id по имени и фамилии режиссёра. Каждый внешний запрос принимает из вложенного запроса значение ключа dir_id и возвращает названия постановок (Name):
Поделиться с друзьями
Назад<<< | Содержание | Вперёд>>> |