В этом руководстве вы узнаете, как использовать 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 для объединения строк из нескольких запросов в один набор результатов.