Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Оператор UNION позволяет объединять результаты нескольких инструкций SELECT в один результирующий набор. У результирующих наборов, объединяемых с помощью оператора UNION, должна быть одинаковая структура. Они должны содержать одинаковое количество столбцов, а в соответствующих столбцах результирующих наборов должны быть совместимые типы данных. Дополнительные сведения см. в разделе Правила использования оператора UNION.
Оператор UNION задается следующим образом:
select_statement UNION [ALL] select_statement
Например таблицы Table1 и Table2 имеют одинаковую структуру — содержат по два столбца.
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Этот запрос объединяет таблицы с помощью оператора UNION:
SELECT * FROM Table1
UNION
SELECT * FROM Table2
Ниже приведен результирующий набор:
ColumnA ColumnB
------- --------
abc 1
def 2
ghi 3
jkl 4
mno 5
Имена столбцов результирующего набора UNION совпадают с именами столбцов в результирующем наборе первой инструкции SELECT в операторе UNION. Имена столбцов результирующих наборов прочих инструкций SELECT игнорируются.
По умолчанию оператор UNION удаляет повторяющиеся строки из результирующего набора. Если указан параметр ALL, то результат будет содержать все строки, и повторяющиеся строки не будут удалены.
Точный результат оператора UNION зависит от параметра сортировки, выбранного во время установки, а также от предложения ORDER BY. Дополнительные сведения о влиянии различных параметров сортировки см. в разделе Работа с параметрами сортировки.
В инструкции Transact-SQL может быть любое количество операторов UNION. Например:
SELECT * FROM TableA
UNION
SELECT * FROM TableB
UNION
SELECT * FROM TableC
UNION
SELECT * FROM TableD
По умолчанию SQL Server 2005 вычисляет инструкцию с операторами UNION слева направо. Порядок вычисления задается с помощью скобок. Например следующие инструкции не эквивалентны:
/* First statement. */
SELECT * FROM TableA
UNION ALL
( SELECT * FROM TableB
UNION
SELECT * FROM TableC
)
GO
/* Second statement. */
(SELECT * FROM TableA
UNION ALL
SELECT * FROM TableB
)
UNION
SELECT * FROM TableC)
GO
Примечания
В первой инструкции повторы в объединении TableB и TableC удаляются. В объединении этого набора с TableA повторы не удаляются. Во второй инструкции повторы включены в объединение TableA и TableB, но устраняются при последующем объединении с TableC. В этом выражении параметр ALL влияет на окончательный результат.
При использовании оператора UNION в отдельных инструкциях SELECT не может быть собственных предложений ORDER BY или COMPUTE. После последней инструкции SELECT может быть только одно предложение ORDER BY или COMPUTE. Оно применяется к окончательному, объединенному результирующему набору. Предложения GROUP BY и HAVING могут быть заданы только в отдельных инструкциях SELECT.
См. также
Основные понятия
Использование операторов UNION, EXCEPT и INTERSECT с инструкциями языка Transact-SQL