Объединение запросов, оператор Union
Результаты выполнения SQL запросов можно объединять. Для этого существует оператор UNION.
Общая структура запроса с оператором UNION
SELECT поля_таблиц FROM список_таблиц ... UNION [ALL] SELECT поля_таблиц FROM список_таблиц ... ;
UNION по умолчанию убирает повторения в результирующей таблице. Для отображения с повторением есть необязательный параметр ALL.
- Не путайте операции объединения запросов с операциями объединения таблиц. Для этого служит оператор JOIN.
- Не путайте операции объединения запросов с подзапросами. Подзапросы выполняются для связанных таблиц.
Объединение таблиц оператором UNION выполняется для таблиц никак не связанных, но со схожей структурой.
Для того, чтобы UNION корректно сработал нужно: чтобы результирующие таблицы каждого из SQL запросов имели одинаковое число столбцов, с одним и тем же типом данных и в той же самой последовательности.
Существует два других оператора, чьё поведение крайне схоже с UNION:
- INTERSECT Комбинирует два запроса SELECT, но возвращает записи только первого SELECT, которые имеют совпадения во втором элементе SELECT.
- EXCEPT Комбинирует два запроса SELECT, но возвращает записи только первого SELECT, которые не имеют совпадения во втором элементе SELECT.
Примеры использования
Например, необходимо вывести наименование всех товаров и имена всех членов семьи (весьма условная задача). Так как типы данных совпадают мы можем это сделать.
SELECT DISTINCT Goods.good_name AS name FROM Goods UNION SELECT DISTINCT FamilyMembers.member_name AS name FROM FamilyMembers;