EXISTS 구문에 대한 질문드립니다. 0 1 6,146

by 망뎅이 [Oracle 기초] EXISTS [2013.03.17 12:17:41]


 
WITH V_TEST AS (
 SELECT 'A' COL FROM DUAL
 UNION ALL
 SELECT 'B' COL FROM DUAL
 UNION ALL
 SELECT 'C' COL FROM DUAL
 UNION ALL
 SELECT 'D' COL FROM DUAL
 UNION ALL
 SELECT 'E' COL FROM DUAL
 UNION ALL
 SELECT 'F' COL FROM DUAL
 UNION ALL
 SELECT 'G' COL FROM DUAL
 UNION ALL
 SELECT NULL COL FROM DUAL
)
SELECT COL
FROM V_TEST
WHERE EXISTS (
 SELECT 1 FROM V_TEST WHERE COL IS NOT NULL
);


EXIST구문에서 WHERE 조건이 IS NOT NULL, IS NULL 상관없이 null인 데이터가 조회가 됩니다. null을 오라클 엔진이 UNKNOWN으로 인식해서 그렇게 되는 것인지 알고 싶어요.
고수님들의 답변 부탁드립니다.
by 손님 [2013.03.17 20:31:43]

오라클 엔진이 UNKNOWN으로 인식해서 그렇게 되는 것인지 알고 싶어요?

아뇨

EXISTS 의 사용법을 잘 모르시는거같아요..

EXISTS는 메인 쿼리에서 서브쿼리에 있는지 없는지 판단하기 위해서 사용하죠..

머 세미조인으로 풀릴수도 있고, 필터로 풀릴수도있고..

그런데 위같은경우는 모든 메인 집합의 로우는 항상 트루 조건으로 모든게 나오는거죠..

님이 원하시는것으로 할려면..

SELECT COL
FROM V_TEST A
WHERE EXISTS (
 SELECT 1 FROM V_TEST V WHERE COL IS NOT NULL AND A.COL = V.COL
);

또는..

SELECT COL
FROM V_TEST A
WHERE COL IN  (
 SELECT COL FROM V_TEST V --WHERE COL IS NOT NULL AND A.COL = V.COL
);

10g 이상이면 실행 계획은 같음..


댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입