-
[Oracle] Minus, Not Exists, ...Database 2010. 10. 25. 18:31
두 A, B 테이블에서 겹치는 값(교집합)을 제거하고 A 테이블에 대한 값을 나타내고 자 할때 사용하는 쿼리를 구현해 보았습니다.
여기서 A, B 테이블의 Column은 서로 다릅니다..
A 테이블에 속성에는 value1(PK), value3, value5
B 테이블에 속성에는 value1(FK), value2, value4, value6
이와 같은 테이블이 존재할 때 Minus연산과 Not Exists 연산에 대한 쿼리입니다.
아래의 두 경우의 Query는 index를 사용하지 않고, Table Scan을 합니다.
-- minus일때 SELECT a.Value1, a.value2, a.value3 FROM A_table a MINUS SELECT a.Value1, a.value2, a.value3 FROM A_table a, B_table b WHERE a.value1 = b.value1;
-- not exists일때 SELECT a.Value1, a.value2, a.value3 FROM A_table a WHERE NOT EXISTS (SELECT a.Value1, a.value2, a.value3 FROM A_table a, B_table b WHERE a.value1 = b.value1);
※ Index를 이용하지 않고 table scan을 하는 경우
ⓐ Not 연산을 사용하는 경우
ⓑ IS NULL, IS NOT NULL 사용
ⓒ 옵티마이저의 취사 선택
ⓓ 외부적인 변형(External Suppressing)
ⓔ 내부적인 변형(Internal Suppressing)
위의 경우를 제외하고 Index를 사용합니다!!
참고 : http://powerhan.tistory.com/32
'Database' 카테고리의 다른 글
Oracle Function (0) 2011.04.23 [Oracle] Function (0) 2011.01.06 [Oracle] 내장함수 (0) 2010.10.08 [SQLServer] Fuction.............. (0) 2010.06.19 [T-SQL] Trigger에 대한 이해.. (0) 2010.05.08