UNION в SQLОператор
UNION
используется для объединения результатов двух или более запросов
SELECT
в один набор результатов. Команда UNION отличается от JOIN-операторов, которые объединяют столбцы из двух таблиц. UNION создает новую таблицу, помещая все строки из двух исходных таблиц в таблицу результатов и располагая эти строки друг над другом.
Далее приведены основные правила объединения наборов результатов двух запросов SELECT с помощью
UNION
:
- Количество и порядок столбцов должны быть одинаковыми во всех запросах.
- Типы данных соответствующих столбцов должны быть совместимы.
Если эти критерии выполняются, то таблицы совместимы с оператором UNION.
СинтаксисБазовый синтаксис оператора
UNION
представлен следующим образом:
SELECT список_столбцов
FROM таблица1
UNION SELECT список_столбцов
FROM таблица2;
Чтобы лучше понять, как работает оператор
UNION
, предположим, что в таблицах
employees
и
departments
существуют некоторые гипотетические поля
first_nam
e и
last_name
. Обратите внимание, что эти поля на самом деле не существуют в демонстрационных таблицах.
Таблица employees+----+------------+-----------+--------+
| id | first_name | last_name | salary |
+----+------------+-----------+--------+
| 1 | Ethan | Hunt | 5000 |
| 2 | Tony | Montana | 6500 |
| 3 | Sarah | Connor | 8000 |
| 4 | Rick | Deckard | 7200 |
| 5 | Martin | Blank | 5600 |
+----+------------+-----------+--------+
Таблица departments+----+------------+-----------+----------+
| id | first_name | last_name | city |
+----+------------+-----------+----------+
| 1 | Maria | Anders | Berlin |
| 2 | Fran | Wilson | Madrid |
| 3 | Dominique | Perrier | Paris |
| 4 | Martin | Blank | Turin |
| 5 | Thomas | Hardy | Portland |
+----+------------+-----------+----------+
Выполним оператор
UNION
, чтобы объединить результаты двух запросов.
Следующая команда вернет имена и фамилии всех клиентов и сотрудников:
SELECT first_name, last_name
FROM employees
UNIONSELECT first_name, last_name
FROM customers;
После выполнения приведенной выше команды вы получите такой результат:
+---------------+--------------+
| first_name | last_name |
+---------------+--------------+
| Ethan | Hunt |
| Tony | Montana |
| Sarah | Connor |
| Rick | Deckard |
| Martin | Blank |
| Maria | Anders |
| Fran | Wilson |
| Dominique | Perrier |
| Thomas | Hardy |
+---------------+--------------+
Оператор
UNION
по умолчанию удаляет дублирующиеся строки из объединенного набора результатов. Вот почему приведенный выше запрос возвращает только 9 строк. Если вы заметили, имя Martin Blank встречается и в таблице
employees
, и в таблице
customers
.
Однако если вы хотите оставить дублирующиеся строки, используйте ключевое слово
ALL
, как показано ниже:
SELECT first_name, last_name
FROM employees
UNION ALLSELECT first_name, last_name
FROM customers;
#db👉 @database_info