ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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
Designed by Tistory.