English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этом руководстве вы узнаете, как комбинировать результаты двух или более SQL-запросов.
Оператор 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;