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


Выполнение полусоединений с помощью операторов EXCEPT и INTERSECT

Операторы EXCEPT и INTERSECT позволяют выполнять сравнение результатов двух или более инструкций SELECT и возвращать уникальные значения. Оператор EXCEPT возвращает все уникальные значения из запроса слева от оператора, которые не возвращаются запросом справа от оператора. Оператор INTERSECT возвращает все уникальные значения, возвращаемые как запросом слева, так и запросом справа от оператора INTERSECT. Результирующие наборы, сравниваемые операторами EXCEPT или INTERSECT, должны иметь одинаковую структуру. У них должно быть одинаковое количество столбцов, а в соответствующих столбцах результирующих наборов должны содержаться совместимые типы данных. Дополнительные сведения см. в разделе EXCEPT и INTERSECT (Transact-SQL).

Рассмотрим таблицы TableA, TableB и TableC со следующими данными в столбцах col1 типа int.

TableA (col1 int) TableB (col1 int) TableC (col1 int)

NULL

NULL

2

NULL

1

2

NULL

3

2

1

4

4

2

4

4

2

2

3

4

4

Следующий запрос с оператором EXCEPT возвращает все уникальные значения слева от оператора, которые отсутствуют в запросе справа.

SELECT * FROM TableA EXCEPT SELECT * FROM TableB

Ниже приведены результаты:

Col1       
----------- 
2

(1 row(s) affected)

Следующий запрос с оператором INTERSECT возвращает все уникальные значения, возвращаемые как запросом слева, так и запросом справа от оператора.

SELECT * FROM TableA INTERSECT SELECT * FROM TableB

Ниже приведены результаты:

Col1       
----------- 
NULL
1
3
4

(4 row(s) affected)

Оператор INTERSECT получает больший приоритет, чем EXCEPT. Например, в следующем запросе используются оба оператора:

SELECT * FROM TableA EXCEPT SELECT * FROM TableB INTERSECT SELECT * FROM TableC

Ниже приведены результаты:

Col1       
----------- 
NULL
1
2
3

(4 row(s) affected)

См. также

Основные понятия

Использование операторов UNION, EXCEPT и INTERSECT с инструкциями языка Transact-SQL

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

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