SQL оператор UNION ALL

В этом учебном материале вы узнаете, как использовать SQL оператор UNION ALL с синтаксисом и примерами.

Описание

SQL оператор UNION ALL используется для объединения результирующих наборов из 2 или более операторов SELECT. Он не удаляет повторяющиеся строки между различными операторами SELECT (возвращаются все строки).
Каждый оператор SELECT в UNION ALL должен иметь одинаковое количество полей в наборах результатов с одинаковыми типами данных.

В чем разница между UNION и UNION ALL?

  • Оператор UNION удаляет повторяющиеся строки.
  • UNION ALL не удаляет повторяющиеся строки

Синтаксис

Синтаксис для оператора UNION ALL в SQL.

SELECT expression1, expression2, … expression_n
FROM tables
[WHERE conditions]
UNION ALL
SELECT expression1, expression2, … expression_n
FROM tables
[WHERE conditions];

Параметры или аргумент

expression1, expression2, expression_n
Столбцы или расчеты, которые вы хотите получить
tables
Таблицы, из которых вы хотите получить записи. В предложении FROM должна быть указана хотя бы одна таблица
WHERE conditions
Необязательный. Условия, которые должны быть выполнены для записей, которые будут выбраны

Примечание

  • В обоих запросах SELECT должно быть одинаковое количество выражений
  • Соответствующие выражения должны иметь одинаковый тип данных в запросах SELECT. Например: expression1 должен иметь одинаковый тип данных как в первом, так и во втором операторе SELECT
  • Смотрите также оператор UNION

Пример — одиночное поле с тем же именем

Давайте посмотрим, как использовать SQL оператор UNION ALL, который возвращает одно поле. В этом простом примере поле в обоих операторах SELECT будет иметь одинаковое имя и тип данных.
Например.

Этот SQL пример UNION ALL будет возвращать supplier_id несколько раз в наборе результатов, если это же значение появилось в таблицах suppliers и orders. SQL оператор UNION ALL не удаляет дубликаты. Если вы хотите удалить дубликаты, попробуйте использовать оператор UNION.
Теперь давайте рассмотрим этот пример, далее приведем некоторые данные.
Если у вас была таблица suppliers, заполненная следующими записями.

supplier_idsupplier_name
1000Microsoft
2000Oracle
3000Apple
4000Samsung

И таблица orders заполнена следующими записями.

order_idorder_datesupplier_id
2019-07-012000
2019-07-016000
2019-07-027000
2019-07-038000

И вы выполнили следующий оператор UNION ALL.

Вы получите следующие результаты.

supplier_id
1000
2000
2000
3000
4000
6000
7000
8000

Как видно из этого примера, UNION ALL взял все значения supplier_id из таблицы suppliers, а также из таблицы orders и возвратил комбинированный набор результатов. Дубликаты не были удалены, как вы можете видеть по значению supplier_id 2000, которое дважды появляется в наборе результатов.

Пример — разные имена полей

Нет необходимости, чтобы соответствующие столбцы в каждом операторе SELECT имели одинаковые имена, но они должны быть с одинаковыми соответствующими типами данных.
Если у вас нет одинаковых имен столбцов в операторах SELECT, это становится немного сложнее, особенно если вы хотите упорядочить результаты запроса, используя оператор ORDER BY.
Давайте посмотрим, как использовать оператор UNION ALL с разными именами столбцов, и упорядочить результаты запроса.
Например.

В этом SQL примере UNION ALL, поскольку имена столбцов в двух операторах SELECT различаются, более выгодно ссылаться на столбцы в предложении ORDER BY по их положению в наборе результатов. В этом примере мы отсортировали результаты по supplier_id / company_id в порядке возрастания, как обозначено ORDER BY 1. Поля supplier_id / company_id находятся в позиции № 1 в наборе результатов.
Теперь давайте рассмотрим этот пример подробнее с данными.
Если у вас была таблица suppliers, заполненная следующими записями.

supplier_idsupplier_name
1000Microsoft
2000Oracle
3000Apple
4000Samsung

И таблица companies заполнилась следующими записями.

company_idcompany_name
1000Microsoft
3000Apple
7000Sony
8000IBM

И вы выполнили следующий запрос содержащий UNION ALL.

Вы получите следующие результаты.

supplier_idsupplier_name
3000Apple
3000Apple
4000Samsung
7000Sony
8000IBM

Во-первых, обратите внимание, что запись с supplier_id, равной 3000, появляется дважды в наборе результатов, поскольку запрос UNION ALL возвращает все строки и не удаляет дубликаты.
Во-вторых, обратите внимание, что заголовки столбцов в наборе результатов называются supplier_id и supplier_name. Это потому, что это были имена столбцов, использованных в первом операторе SELECT в UNION ALL.
Если бы вы хотели, вы могли бы присвоить псевдонимы следующим образом.

Теперь заголовки столбцов в результате будут иметь псевдоним как ID_Value для первого столбца и Name_Value для второго столбца.

ID_ValueName_Value
3000Apple
3000Apple
4000Samsung
7000Sony
8000IBM