Например, оператор SQL может выглядеть следующим образом.
SELECT EMP_ID, SALARY, PAY_RATE
FROM EMPLOYEE_PAY_TBL
WHERE SALARY IS NOT NULL OR
PAY_RATE IS NOT NULL;
Тот же оператор с помощью UNION можно записать по-другому.
SELECT EMP_ID, SALARY
FROM EMPLOYEE_PAY_TBL
WHERE SALARY IS NOT NULL
UNION
SELECT EMP_ID, PAY_RATE
FROM EMPLOYEE_PAY_TBL
WHERE PAY_RATE IS NOT NULL;
Оба эти оператора возвратят данные об оплате труда всех служащих, для которых указана либо почасовая оплата, либо ставка.
В случае второго оператора в выводе будет присутствовать два столбца - EMP_ID и SALARY и нормы почасовой оплаты (PAY_RATE) тоже будут помещены ~ в столбец SALARY При использовании команды UNION названия (или псевдонимы) столбцов в выводе определяются первым из операторов SELECT
Зачем использовать составные запросы?
Составные запросы используются для того, чтобы комбинировать результаты двух операторов SELECT. Использование составного запроса позволяет организовать или, наоборот, подавить вывод повторяющихся записей. С помощью таких запросов можно выводить одновременно аналогичные данные, хранящиеся в разных столбцах
Составные запросы позволяют комбинировать результаты нескольких запросов в одном выводимом наборе данных Такие запросы часто строятся проще, чем запросы со сложными условиями, и часто допускают большую гибкость в решении разнообразных задач извлечения данных
Команды построения сложных запросов
Команды, использующиеся для построения сложных запросов, зависят от конкретной реализации языка. Стандарт ANSI определяет команды UNION, UNION ALL, INTERSECT и EXCEPT. Все они обсуждаются ниже.
Команда UNION
Команда UNION используется для объединения результатов двух или более операторов SELECT с исключением повторяющихся строк. Другими словами, если строка попадает в вывод одного запроса, то второй раз она не выводится, даже если она возвращается вторым запросом. При использовании UNION в каждом из связываемых операторов SELECT должно быть выбрано одинаковое число столбцов, столбцы должны быть одинакового типа и следовать в том же порядке.
Синтаксис оператора должен быть следующим.
SELECT столбец1 [, столбец2 ]
FROM таблица1 [, таблица2 ]
[ WHERE ]
UNION
SELECT столбец1 [, столбец2 ]
FROM таблица1 [, таблица2 ]
[ WHERE ]
Рассмотрим пример.
SELECT EMP_ID FROM EMPLOYEEJTBL
UNION
SELECT EMP_ID FROM EMPLOYEE_PAY_TBL;
В результате табельные номера, имеющиеся в обеих таблицах, отобразятся только по одному разу.
Для построения примеров с реальными данными используем следующие простые запросы к двум таблицам.
SELECT PROD_DESC FROM PRODUCTS_TBL;
PROD_DESC
КОСТЮМ ВЕДЬМЫ
ПЛАСТИКОВЫЕ ТЫКВЫ
ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ
ФОНАРИ
КОСТЮМЫ В АССОРТИМЕНТЕ
СЛАДКАЯ КУКУРУЗА
ТЫКВЕННЫЕ КОНФЕТЫ
ПЛАСТИКОВЫЕ ПАУКИ
МАСКИ В АССОРТИМЕНТЕ
ЦЕПОЧКА ДЛЯ КЛЮЧЕЙ
ПОЛОЧКА ИЗ ДУБА
11 строк выбраны.
SELECT PROD_DESC FROM PRODUCTS_TMP;
PROD_DESC
КОСТЮМ ВЕДЬМЫ
ПЛАСТИКОВЫЕ ТЫКВЫ
ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ
ФОНАРИ
КОСТЮМЫ В АССОРТИМЕНТЕ
СЛАДКАЯ КУКУРУЗА
ТЫКВЕННЫЕ КОНФЕТЫ
ПЛАСТИКОВЫЕ ПАУКИ
МАСКИ В АССОРТИМЕНТЕ
9 строк выбраны.
Таблица PRODUCTS_TMP была создана в ходе урока 3 Обратитесь к уроку 3 снова, если вам необходимо воссоздать эту таблицу
Теперь объединим эти два запроса с помощью команды UNION, чтобы получить следующий составной запрос
SELECT PROD_DESC FROM PRODUCTS_TBL
UNION
SELECT PROD_DESC FROM PRODUCTS_TMP;
PROD_DESC
ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ
КОСТЮМ ВЕДЬМЫ
КОСТЮМЫ В АССОРТИМЕНТЕ
МАСКИ В АССОРТИМЕНТЕ
ПЛАСТИКОВЫЕ ПАУКИ
ПЛАСТИКОВЫЕ ТЫКВЫ
ПОЛОЧКА ИЗ ДУБА
СЛАДКАЯ КУКУРУЗА
ТЫКВЕННЫЕ КОНФЕТЫ
ФОНАРИ
ЦЕПОЧКА ДЛЯ КЛЮЧЕЙ
11 строк выбраны.
Этот запрос тоже возвращает 11 записей, как и два предыдущих, поскольку при объединении двух запросов с помощью команды UNION повторяющиеся в таблицах записи повторно не выводятся.
В следующем примере с помощью команды UNION комбинируются два независимых запроса.
SELECT PROD_DESC FROM PRODDCTS_TBL
UNION
SELECT LAST_NAME FROM EMPLOYEE_TBL;
PROD_DESC
GLASS
GLASS
PLEW
SPURGEON
STEPHENS
WALLACE
ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ
КОСТЮМ ВЕДЬМЫ
КОСТЮМЫ В АССОРТИМЕНТЕ
МАСКИ В АССОРТИМЕНТЕ
ПЛАСТИКОВЫЕ ПАУКИ
ПЛАСТИКОВЫЕ ТЫКВЫ
ПОЛОЧКА ИЗ ДУБА
СЛАДКАЯ КУКУРУЗА
ТЫКВЕННЫЕ КОНФЕТЫ
ФОНАРИ
ЦЕПОЧКА ДЛЯ КЛЮЧЕЙ
16 строк выбраны.
Здесь значения столбцов PROD_DESC и LAST_NAME оказываются перечисленными вместе, причем для заголовка столбца использовано имя столбца, выбранного в первом запросе.
Читать дальше