[MySQL] NOT IN 과 NOT EXISTS의 차이점

Jaehyeong Kwon·2022년 8월 11일
0

데이터베이스

목록 보기
6/10

NOT IN 과 NOT EXISTS의 차이점

IN은 조건에 만족하는 row를 찾는 것이고 EXISTS는 EXISTS이하 절이 true인지 아닌지를 체크합니다. 둘의 차이점은 Null 값을 처리하는 부분에서 발생합니다. NOT IN은 Null 값이 WHERE 절의 조건을 만족하더라도 결과에서 제외됩니다. NOT EXISTS는 NOT IN과 달리 Null 값을 가진 Row들도 결과에 포함됩니다. 이는 연결고리 값이 Null 값을 가질 때 NOT IN은 조인 연산을 하지 않기 때문에 결과에서 제외되며 NOT EXISTS는 EXISTS 이하의 절이 False를 리턴하고 거기에 대한 NOT이므로 true가 되어 결과에 포함된다.


NOT IN

SELECT * FROM a WHERE a.key NOT IN (SELECT b.key FROM b)

  • b 테이블에 먼저 접근함
  • b.key를 IN 리스트에 나열 후 a.key에 공급
  • b 테이블 : '공급자 역할'

NOT EXISTS

SELECT * FROM a WHERE NOT EXISTS (SELECT * FROM b WHERE a.key = b.key)

  • a 테이블을 먼저 접근
  • 구해진 a의 row들을 NOT EXISTS절의 b테이블에서 필터링
  • b 테이블 : '확인자 역할'
profile
나무와 같이 성장하는 사람

0개의 댓글