В этом руководстве вы узнаете, как использовать SQL Server UNION для объединения результатов двух или более запросов в один набор результатов.
Введение в оператор UNION SQL Server
UNION в SQL Server — это одна из операций над множествами, которая позволяет объединять результаты двух операторов SELECT в один набор результатов, включающий все строки, принадлежащие операторам SELECT в объединении.
Ниже показан синтаксис SQL Server UNION:
query_1 UNION query_2
Ниже приведены требования к запросам в приведенном выше синтаксисе:
- Количество и порядок столбцов должны быть одинаковыми в обоих запросах.
- Типы данных соответствующих столбцов должны быть одинаковыми или совместимыми.
Следующая диаграмма Венна иллюстрирует, как результирующий набор таблицы T1 объединяется с результирующим набором таблицы T2:

СОЮЗ против СОЮЗА ВСЕХ
По умолчанию оператор UNION удаляет все дублирующиеся строки из результирующих наборов. Однако, если вы хотите сохранить дублирующиеся строки, вам необходимо явно указать ключевое слово ALL, как показано ниже:
query_1 UNION ALL query_2
Другими словами, оператор UNION удаляет дублирующиеся строки, а оператор UNION ALL включает дублирующиеся строки в конечный набор результатов.
СОЮЗ против ОБЪЕДИНЕНИЯ
Объединение, такое как INNER JOIN или LEFT JOIN, объединяет столбцы из двух таблиц, а UNION объединяет строки из двух запросов.
Другими словами, join добавляет наборы результатов горизонтально, а union добавляет набор результатов вертикально.
На следующем рисунке показано основное различие между UNION и JOIN:

Примеры UNION SQL Server
См. следующие таблицы персонала и клиентов из образца базы данных :


Примеры UNION и UNION ALL
В следующем примере имена сотрудников и клиентов объединены в один список:
SELECT
first_name,
last_name
FROM
sales.staffs
UNION
SELECT
first_name,
last_name
FROM
sales.customers;

Возвращает 1454 строки.
Таблица «Сотрудники» содержит 10 строк, а таблица «Клиенты» — 1445 строк, как показано в следующих запросах:
SELECT
COUNT(*)
FROM
sales.staffs;
-- 10
SELECT
COUNT(*)
FROM
sales.customers;
-- 1454
Поскольку результирующий набор объединения возвращает только 1454 строки, это означает, что была удалена одна дублирующая строка.
Чтобы включить дублирующуюся строку, используйте UNION ALL, как показано в следующем запросе:
SELECT
first_name,
last_name
FROM
sales.staffs
UNION ALL
SELECT
first_name,
last_name
FROM
sales.customers;
Запрос возвращает 1455 строк, как и ожидалось.
Пример UNION и ORDER BY
Чтобы отсортировать набор результатов, возвращаемых оператором UNION, необходимо поместить предложение ORDER BY в последний запрос следующим образом:
SELECT
select_list
FROM
table_1
UNION
SELECT
select_list
FROM
table_2
ORDER BY
order_list;
Например, чтобы отсортировать имена и фамилии клиентов и сотрудников, используйте следующий запрос:
SELECT
first_name,
last_name
FROM
sales.staffs
UNION ALL
SELECT
first_name,
last_name
FROM
sales.customers
ORDER BY
first_name,
last_name;

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




