English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Оператор UNION в SQL

В этом руководстве вы узнаете, как комбинировать результаты двух или более SQL-запросов.

Оператор UNION

Оператор UNION используется для объединения результатов двух или более SELECT-запросов в один результат. Операция UNION отличается от объединения столбцов двух таблиц с помощью JOIN. Оператор UNION ставит все строки из двух исходных таблиц в одну результатную таблицу, создавая новую таблицу.

Ниже приведены основные правила использования UNION для комбинирования результатов двух SELECT-запросов:

  • В всех запросах количество столбцов и их порядок должны быть одинаковыми.

  • Тип данных соответствующих столбцов должен быть совместим.

Когда выполняются эти условия, эти таблицы совместимы в объединении (union-compatible):

Грамматика

Основная грамматика UNION:

SELECT column_list FROM table1_name
   UNION SELECT column_list FROM table2_name;

Чтобы лучше понять объединение операций, мы предположим, что в таблицах employees и customers существуют некоторые гипотетические поля, такие как first_name и last_name. Обратите внимание, что эти поля фактически отсутствуют в таблицах нашей демонстрационной базы данных.

+----+------------+-----------+--------+
| 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 |
+----+------------+-----------+--------+

+----+------------+-----------+----------+
| 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 |
+----+------------+-----------+----------+
Таблица: employees
Таблица: customers

Давайте выполним операцию объединения, чтобы объединить результаты двух запросов.

Следующее выражение возвращает имена и фамилии всех клиентов и сотрудников:

SELECT first_name, last_name FROM employees 
UNION
SELECT 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 ALL
SELECT first_name, last_name FROM customers;