본문 바로가기

데이터베이스/MSSQL

EXCEPT

 

EXCEPT 및 INTERSECT(Transact-SQL)

 

두 쿼리의 결과를 비교하여 고유한 값을 반환합니다.

EXCEPT는 오른쪽 쿼리에 없는 고유한 값을 왼쪽 쿼리에서 반환합니다.

INTERSECT는 INTERSECT 피연산자의 왼쪽과 오른쪽에 있는 두 쿼리에 의해 반환된 고유한 값을 반환합니다.

EXCEPT 또는 INTERSECT를 사용하는 두 쿼리의 결과 집합을 결합할 때는 다음 기본 규칙을 따라야 합니다. 

  • 열의 개수와 순서가 모든 쿼리에서 동일해야 합니다.
  • 데이터 형식이 호환되어야 합니다. 

 

구문

{ <query_specification> | ( <query_expression> ) } { EXCEPT | INTERSECT }{ <query_specification> | ( <query_expression> ) }
 

EXCEPT 또는 INTERSECT가 식에서 다른 연산자와 함께 사용되는 경우 컨텍스트에서 다음 우선 순위에 따라 계산됩니다.

1. 괄호가 있는 식

2. INTERSECT 피연산자

3. 식에서 EXCEPT와 UNION의 위치를 기준으로 왼쪽에서 오른쪽으로 계산되는 EXCEPT 및 UNION

 

EXCEPT

오른쪽 쿼리에서 반환되지 않은 고유한 값을 EXCEPT 피연산자의 왼쪽에 있는 쿼리에서 반환합니다.

INTERSECT

INTERSECT 피연산자의 왼쪽과 오른쪽에 있는 두 쿼리에 의해 반환된 고유한 값을 반환합니다.

 

 

예)

TABLE "CUSTOMERS"

customerid   city

FISSA          Madrid
FRNDO        Madrid
KRLOS        Madrid
MRPHS       Zion

 

TABLE "ORDERS"

orderid    customerid

1              FRNDO
2              FRNDO
3              KRLOS
4              KRLOS
5              KRLOS
6              MRPHS
7              NULL

 

CUSTOMERS, ORDERS 두 테이블을 예로 적용해 본 결과

 

 

//EXCEPT : 중복되지 않은 고유한값만 반환

SELECT customerid FROM customers
EXCEPT
SELECT customerid FROM orders

  customerid
 1 FISSA

 

 

 

//INTERSECT : 양쪽 쿼리에 모두에 중복된 값만 반환

SELECT customerid FROM customers
INTERSECT
SELECT customerid FROM orders

 

 customerid
 1FRNDO
 2KRLOS
 3MRPHS

 

 

 

출처

http://msdn.microsoft.com/ko-kr/library/ms188055.aspx

Inside Microsoft® SQL Server™ 2005 T-SQL Querying



1. Oracle의MINUS연산자가 SQL Server에는 존재하지 않는다.
대신이라고 하긴 조금 틀리지만EXCEPT라는 연산자가 있어, 약간은 비슷한 처리를 할 수 있다.
EXCEPT : 왼쪽의 쿼리에 있고, 오른쪽 쿼리에 없는 각 값을 돌려준다.
insert into TBL1 values ('1');
insert into TBL1 values ('2');
insert into TBL1 values ('3');
insert into TBL2 values ('1');
insert into TBL2 values ('3');

select * from TBL1
EXCEPT
select * from TBL2

>결과
2
  • 위의 예로는 MINUS와 같은 결과가 된다.
2. 왼쪽 쿼리의 결과에 오른쪽 쿼리가 복수의 일치하는 값을 갖고 있을경우엔 MINUS와는 다른 결과가 되고 만다.
일치하는 모든 값을 제거해 버리기 때문이다.
insert into TBL1 values ('1');
insert into TBL1 values ('1');
insert into TBL1 values ('2');
insert into TBL2 values ('1');
insert into TBL2 values ('3');

select * from TBL1
EXCEPT
select * from TBL2

>결과
2
  • TBL1에 복수 존재하는 "1"의 값은 모두 제거된 뒤의 결과가 된다.

'데이터베이스 > MSSQL' 카테고리의 다른 글

Connection Pooling  (0) 2012.11.13
3자리마다 콤마 처리하기  (0) 2012.11.09
SQL 2008 부터 지원하는 MERGE (머지)  (0) 2012.10.17
[기본] Cursor  (0) 2012.10.17
MSSQL 2005 이상 버전부터 사용 가능한 PAGING  (0) 2012.10.04