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

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

Смотрите также