Перейти к основному содержимому
Перейти к основному содержимому

Оператор UNION

Вы можете использовать UNION, явно указывая UNION ALL или UNION DISTINCT.

Если вы не укажете ALL или DISTINCT, это будет зависеть от настройки union_default_mode. Разница между UNION ALL и UNION DISTINCT состоит в том, что UNION DISTINCT будет выполнять преобразование для удаления дубликатов в результате объединения, что эквивалентно SELECT DISTINCT из подзапроса, содержащего UNION ALL.

Вы можете использовать UNION для объединения любого количества запросов SELECT, расширяя их результаты. Пример:

Столбцы результатов сопоставляются по их индексу (порядок внутри SELECT). Если названия столбцов не совпадают, названия для окончательного результата берутся из первого запроса.

Приведение типов выполняется для объединений. Например, если два объединяемых запроса имеют одно и то же поле с типами, не являющимися Nullable и Nullable из совместимого типа, результирующее поле UNION будет иметь тип Nullable.

Запросы, входящие в состав UNION, могут быть заключены в круглые скобки. ORDER BY и LIMIT применяются к отдельным запросам, а не к окончательному результату. Если вам нужно применить преобразование к окончательному результату, вы можете поместить все запросы с UNION в подзапрос в FROM клаузе.

Если вы используете UNION, не указывая явно UNION ALL или UNION DISTINCT, вы можете задать режим объединения с помощью настройки union_default_mode. Значения настройки могут быть ALL, DISTINCT или пустой строкой. Однако, если вы используете UNION с настройкой union_default_mode, установленной в пустую строку, это вызовет исключение. Следующие примеры демонстрируют результаты запросов с разными значениями настройки.

Запрос:

Результат:

Запрос:

Результат:

Запросы, входящие в состав UNION/UNION ALL/UNION DISTINCT, могут выполняться одновременно, и их результаты могут быть смешаны.

См. также