본문 바로가기

Database/DB

oracle 부정형 조인(ANTI JOIN)

두개의 테이블에서 각각 한개의 칼럼을 비교하여 없는것을 찾는 조인이 부정형 조인 / 안티 조인이라 한다.


 두개의 테이블 A , B 가 아래와 같이 있다고 하자.                 

만일  A not in (B) 를 한다면 결과 값은 bbb 가 나오게 된다.

만일 B not in (A) 가 된다면? 아래의 그림처럼 ccc, ddd 가 나오게 된다.





소스는 심플하다.



select 

distinct a.id , a.name

from A a

where 

 a.id is not null

 and a.id not in (select /*+ HASH_AJ*/  id  from B  where id is not null)


 - 오라클 11g부터는 not null을 명시 하지 않아도 된다. 그전 버전을 사용한다면 꼭 not null을 넣어주기 바랍니다.(결과값이 달라집니다.)

- 실행계획은 강제적으로 /*+ HASH_AJ*/ 을 넣었습니다. 명시 하지 않으면 다르게 실행될 가능성이 있습니다.