Поделиться через


Объединение наборов результатов с помощью оператора UNION

Оператор UNION позволяет объединять результаты нескольких инструкций SELECT в один результирующий набор. У результирующих наборов, объединяемых с помощью оператора UNION, должна быть одинаковая структура. Они должны содержать одинаковое количество столбцов, а в соответствующих столбцах результирующих наборов должны быть совместимые типы данных. Дополнительные сведения см. в разделе Правила использования оператора UNION.

Оператор UNION задается следующим образом:

select_statement UNION [ALL] select_statement

Например таблицы Table1 и Table2 имеют одинаковую структуру — содержат по два столбца.

TABLE1

TABLE2

COLUMNA

COLUMNB

COLUMNC

COLUMND

CHAR(4)

INT

CHAR(4)

INT

-------

---

-------

---

ABC

1

GHI

3

DEF

2

JKL

4

GHI

3

MNO

5

Этот запрос объединяет таблицы с помощью оператора 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

Другие ресурсы

UNION (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005