Фраза UNION объединяет результаты двух запросов по следующим правилам:
- каждый из объединяемых запросов должен содержать одинаковое число столбцов;
- тип значений из попарно объединяемых столбцов должен быть одинаковым или приводимым. Так, нельзя объединять значения из столбца типа integer и столбца типа varchar;
- из результирующего набора автоматически исключаются совпадающие строки (рис. 4.1);
Рис. 4.1. Выполнение UNION-объединения с исключением совпадающих строк
- если в строку вставляется какая-либо константа, добавляемая в запросе, то ее значение также влияет на идентичность строк (рис. 4.2)
Рис. 4.2. Выполнение UNION-объединения, использующего выражения
Стандарт не накладывает никаких ограничений на упорядочивание строк в результирующем наборе. Так, некоторые СУБД сначала выводят результат первого запроса, а затем результат второго запроса. СУБД Oracle автоматически сортирует записи по первому указанному столбцу даже в том случае, если для него не создан индекс.
Для того чтобы явно указать требуемый порядок сортировки, следует использовать фразу ORDER BY. При этом можно использовать как имя столбца, так и его номер (рис. 4.3).
Рис. 4.3. Выполнение UNION-объединения с упорядочиванием результирующего набора
Фраза UNION ALL выполняет объединение двух подзапросов аналогично фразе ALL со следующими исключениями:
- совпадающие строки не удаляются из формируемого результирующего набора;
- объединяемые запросы выводятся в результирующем наборе последовательно без упорядочивания.
При объединении более двух запросов для изменения порядка выполнения операции объединения можно использовать скобки (рис. 4.4).
Рис. 4.4. Выполнение UNION-объединения для трех запросов