Объединение запросов, оператор 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;
name
apartment fee
phone fee
bread
milk
red caviar
cinema
black caviar
cough tablets
potato
pineapples
television
vacuum cleaner
jacket
fur coat
music school fee
english school fee
Headley Quincey
Flavia Quincey
Andie Quincey
Lela Quincey
Annie Quincey
Ernest Forrest
Constance Forrest
Wednesday Addams