Секция UNION
Вы можете использовать UNION
в двух режимах: UNION ALL
или UNION DISTINCT
.
Если UNION
используется без указания ALL
или DISTINCT
, то его поведение определяется настройкой union_default_mode
. Разница между UNION ALL
и UNION DISTINCT
в том, что UNION DISTINCT
выполняет явное преобразование для результата объединения. Это равнозначно выражению SELECT DISTINCT
из подзапроса, содержащего UNION ALL
.
Чтобы объединить любое количество SELECT
запросов путем объединения их результатов, вы можете использовать UNION
. Пример:
Результирующие столбцы сопоставляются по их индексу (порядку внутри 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
, выполняются параллельно, и их результаты могут быть смешаны вместе.
Смотрите также
- Настройка insert_null_as_default.
- Настройка union_default_mode.