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