728x90
    
    
  두 테이블 간 조인을 할때 NOT IN 조건으로 JOIN 을 할 경우 처리하는 방법이다.
아래 예제 에서는 B 테이블의 value 컬럼의 내용을 NOT IN 조건으로 처리한다.
1.
SELECT  A.*FROM    A LEFT JOIN B ON A.value = B.valueWHERE   B.value IS NULL2.
SELECT  A.*FROM    AWHERE   value NOT IN(SELECT  valueFROM    B)3.
SELECT  A.*FROM    AWHERE   NOT EXISTS(SELECT  valueFROM    BWHERE   B.value = A.value)value 컬럼이 인덱스처리가 된 경우 성능차이는 없다고 한다.
그러나 value 컬럼이 NOT NULL임을 보장하지 않는 경우 하위 쿼리 결과 집합에 NULL 값이 있는지 여부에 따라
다른 결과가 생성되므로 NOT IN 대신 LEFT JOIN / IS NULL 또는 NOT EXISTS를 사용해야한다.
참고
https://explainextended.com/2009/09/17/not-in-vs-not-exists-vs-left-join-is-null-oracle/
728x90
    
    
  'DB' 카테고리의 다른 글
| [DB] sa 접속 허용 및 비밀번호 바꾸기 (0) | 2020.07.22 | 
|---|---|
| [DB] MSSQL Server 127.0.0.1 로 접속 가능하게 하기 (0) | 2020.07.22 | 
| [Oracle] 특정 컬럼의 여러 Row 데이터를 한 Row 로 나타내기 (0) | 2020.05.06 | 
| [Oracle] 오라클 문자열 잘라내기 (0) | 2020.05.04 | 
| (SQLite) SQLite 공부하기 좋은 사이트 (0) | 2018.03.07 |