IT/DB

Oracle Exists Versus IN

우서바 2012. 2. 1. 17:59


출처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

                         ) 

                 )