DB
[Oracle] NOT IN 조건으로 JOIN 하기
kjun.kr
2020. 5. 25. 23:25
728x90
728x170
두 테이블 간 조인을 할때 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
그리드형