728x90
두 테이블 간 조인을 할때 NOT IN 조건으로 JOIN 을 할 경우 처리하는 방법이다.
아래 예제 에서는 B 테이블의 value 컬럼의 내용을 NOT IN 조건으로 처리한다.
1.
SELECT
A.*
FROM
A LEFT
JOIN
B
ON
A.value = B.value
WHERE
B.value
IS
NULL
2.
SELECT
A.*
FROM
A
WHERE
value
NOT
IN
(
SELECT
value
FROM
B
)
3.
SELECT
A.*FROM
A
WHERE
NOT
EXISTS
(
SELECT
value
FROM
B
WHERE
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 |