СОЮЗ SQL-сервера

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

Введение в оператор UNION SQL Server

UNION в SQL Server — это одна из операций над множествами, которая позволяет объединять результаты двух операторов SELECT в один набор результатов, включающий все строки, принадлежащие операторам SELECT в объединении.

Ниже показан синтаксис SQL Server UNION:

query_1
UNION
query_2

Ниже приведены требования к запросам в приведенном выше синтаксисе:

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

Следующая диаграмма Венна иллюстрирует, как результирующий набор таблицы T1 объединяется с результирующим набором таблицы T2:

Диаграмма Венна для SQL Server UNION

СОЮЗ против СОЮЗА ВСЕХ

По умолчанию оператор UNION удаляет все дублирующиеся строки из результирующих наборов. Однако, если вы хотите сохранить дублирующиеся строки, вам необходимо явно указать ключевое слово ALL, как показано ниже:

query_1
UNION ALL
query_2

Другими словами, оператор UNION удаляет дублирующиеся строки, а оператор UNION ALL включает дублирующиеся строки в конечный набор результатов.

СОЮЗ против ОБЪЕДИНЕНИЯ

Объединение, такое как INNER JOIN или LEFT JOIN, объединяет столбцы из двух таблиц, а UNION объединяет строки из двух запросов.

Другими словами, join добавляет наборы результатов горизонтально, а union добавляет набор результатов вертикально.

На следующем рисунке показано основное различие между UNION и JOIN:

SQL Server 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;

Пример объединения SQL Server

Возвращает 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;

Пример SQL Server UNION ALL

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

Мирослав С.

Автор статей, ИБ-специалист