Объединение запросов, оператор Union

Результаты выполнения SQL запросов можно объединять. Для этого существует оператор UNION.

Общая структура запроса с оператором UNION

MySQL
SELECT поля_таблиц FROM список_таблиц ...
UNION [ALL] 
SELECT поля_таблиц FROM список_таблиц ... ;

В описанной структуре запроса необязательные параметры указаны в квадратных скобках.

UNION по умолчанию убирает повторения в результирующей таблице. Для отображения с повторением есть необязательный параметр ALL.

  • Не путайте операции объединения запросов с операциями объединения таблиц. Для этого служит оператор JOIN.
  • Не путайте операции объединения запросов с подзапросами. Подзапросы выполняются для связанных таблиц.

Объединение таблиц оператором UNION выполняется для таблиц никак не связанных, но со схожей структурой.

Для того, чтобы UNION корректно сработал нужно: чтобы результирующие таблицы каждого из SQL запросов имели одинаковое число столбцов, с одним и тем же типом данных и в той же самой последовательности.

Существует два других оператора, чьё поведение крайне схоже с UNION:

  • INTERSECT
    Комбинирует два запроса SELECT, но возвращает записи только первого SELECT, которые имеют совпадения во втором элементе SELECT.
  • EXCEPT
    Комбинирует два запроса SELECT, но возвращает записи только первого SELECT, которые не имеют совпадения во втором элементе SELECT.

Примеры использования

Например, необходимо вывести наименование всех товаров и имена всех членов семьи (весьма условная задача). Так как типы данных совпадают мы можем это сделать.

MySQL
SELECT DISTINCT Goods.good_name AS name FROM Goods
UNION
SELECT DISTINCT FamilyMembers.member_name AS name FROM FamilyMembers;
Вложенные запросы
Добавление данных, оператор INSERT