EXCEPT 및 INTERSECT를 사용하여 세미 조인 수행

두 번째 입력에 일치하는 행이 적어도 한 개 이상 있을 경우 세미 조인에 의해 첫 번째 입력에서 행이 반환되고 두 번째 입력에 일치하는 행이 없을 경우 앤티 조인에 의해 첫 번째 입력에서 행이 반환됩니다. 세미 조인 및 앤티 조인을 수행하려면 EXCEPT 및 INTERSECT 연산자를 사용합니다. 이러한 연산자를 사용하면 둘 이상의 SELECT 문의 결과를 비교하고 고유한 값을 반환할 수 있습니다. EXCEPT 연산자는 EXCEPT 연산자 왼쪽에 있는 쿼리에서 오른쪽에 있는 쿼리에서 반환되지 않는 모든 고유 값을 반환합니다. INTERSECT는 INTERSECT 연산자 왼쪽과 오른쪽에 있는 쿼리에서 모두 반환되는 모든 고유 값을 반환합니다. EXCEPT 또는 INTERSECT를 사용하여 비교하는 결과 집합은 같은 구조여야 합니다. 즉, 열의 개수가 같아야 하고 해당 결과 집합 열은 호환되는 데이터 형식을 가져야 합니다. 자세한 내용은 EXCEPT 및 INTERSECT(Transact-SQL)를 참조하십시오.

TableA, TableBTableC 테이블의 int 열인 col1에 다음 데이터가 있다고 가정합니다.

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를 사용하는 다음 쿼리는 EXCEPT 연산자 왼쪽에 있는 쿼리에서 오른쪽 쿼리에도 없는 모든 고유한 값을 반환합니다.

SELECT * FROM TableA EXCEPT SELECT * FROM TableB

결과 집합은 다음과 같습니다.

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

(1 row(s) affected)

INTERSECT를 사용하는 다음 쿼리는 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)