Oracle Exists Versus IN
출처1 : http://energ.tistory.com/187
출처2 : http://msfury.tistory.com/59
EXISTS :
SELECT 데이터1,
데이터2
FROM 테이블 A
WHERE 조건식1
AND EXISTS (
SELECT 'X'
FROM 테이블 B
WHERE 조건식1
AND A.컬럼 = B.컬럼
)
IN :
SELECT 데이터1,
데이터2
FROM 테이블 A
WHERE 조건식1
AND A.컬럼 IN (
SELECT B.컬럼
FROM 테이블 B
WHERE 조건식1
)
---------------------------------------------------------------------------------
NOT EXIST 와 NOT IN 의 차이
NOT IN 은 ROW가 존재해도 JOIN 걸린 값이 NULL 일 경우 FALSE 를 리턴함에 주의
select idx, na
from ( select 1 idx, 'kim' na from dual
union
select 2 idx, 'lee' na from dual
union
select 3 idx, 'park'na from dual
) o
where not exists ( select 1
from ( select 2 idx from dual
union
select 3 idx from dual
) i
where i.idx = o.idx
)
select idx, na
from ( select 1 idx, 'kim' na from dual
union
select 2 idx, 'lee' na from dual
union
select 3 idx, 'park'na from dual
) o
where idx NOT IN ( select idx
from ( select nvl(null,0) idx from dual
union
select 2 idx from dual
union
select 3 idx from dual
)
)