MSSQL 차집합 구하기
--테스트 DB/TABLE 준비
use master
create database test20131114
go
use test20131114
create table A
(
id int
)
create table B
(
id int
)
insert into A values (1)
insert into A values (2)
insert into A values (3)
insert into A values (4)
insert into A values (5)
insert into B values (1)
insert into B values (2)
insert into B values (3)
/*
위와 같이 A 테이블(집합 A)에는 1,2,3,4,5가 있고,
B 테이블(집합 B)에는 1,2,3이 있다.
집합 A에서 집합 B를 뺀 차집합은 4,5가 된다.
수학 기호로는 A-B={4,5} 이다.
*/
--가장 간결한 방법
select id
from A
except
select id
from B
/*
EXCEPT 및 INTERSECT
두 쿼리의 결과를 비교하여 고유한 값을 반환합니다.
EXCEPT는 오른쪽 쿼리에 없는 고유한 값을 왼쪽 쿼리에서 반환합니다.
INTERSECT는 INTERSECT 피연산자의 왼쪽과 오른쪽에 있는 두 쿼리에 의해 반환된 고유한 값을 반환합니다.
참고 : http://msdn.microsoft.com/ko-kr/library/ms188055.aspx
*/
--NOT IN을 이용한 방법
select id
from A
where id not in (
select id
from B
)
/*
부연참고 : http://smartweb.tistory.com/4
*/
--IS NULL을 이용한 방법
select A.id
from (
select id
from A
) A
left join (
select id
from B
) B on B.id=A.id
where B.id is null