정미나닷컴

[Oracle] 오라클 쿼리 변환 - 조건절 이행 본문

IT

[Oracle] 오라클 쿼리 변환 - 조건절 이행

정미나 2017. 11. 13. 15:52

조건절 이행

- 『(A = B) 이고 (B = C) 이면 (A = C) 이다』는 추론을 통해 새로운 조건절을 내부적으로 생성해 주는 쿼리변환

- 『(A > B) 이고 (B > C) 이면 (A > C) 이다』와 같은 추론도 가능

- A 테이블에 사용된 필터 조건이 JOIN 조건절을 타고 반대편 B 테이블에 대한 필터 조건으로 이행

- 한 테이블 내에서도 두 컬럼간 관계정보를 이용해 조건절 이행

SELECT * 

   FROM MINA.DEPT D, MINA.EMP E

 WHERE E.JOB = 'MANAGER'

     AND E.DEPT_NO = '10'

     AND D.DEPT_NO = E.DEPT_NO;

-----------------------------------------------------------------------------------------

| Id  | Operation                    | Name    | Starts | A-Rows |   A-Time   | Buffers |

-----------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT             |         |      1 |      1 |00:00:00.01 |       4 |

|   1 |  NESTED LOOPS                |         |      1 |      1 |00:00:00.01 |       4 |

|   2 |   TABLE ACCESS BY INDEX ROWID| DEPT    |      1 |      1 |00:00:00.01 |       2 |

|*  3 |    INDEX UNIQUE SCAN         | PK_DEPT |      1 |      1 |00:00:00.01 |       1 |

|   4 |   TABLE ACCESS BY INDEX ROWID| EMP     |      1 |      1 |00:00:00.01 |       2 |

|*  5 |    INDEX RANGE SCAN          | EMP_IDX |      1 |      1 |00:00:00.01 |       1 |

-----------------------------------------------------------------------------------------

 

Predicate Information (identified by operation id):

---------------------------------------------------

   3 - access("D"."DEPT_NO"='10')

   5 - access("E"."DEPT_NO"='10' AND "E"."JOB"='MANAGER')   

   

- 『E.DEPT_NO = '10'』 이고 『E.DEPT_NO = D.DEPT_NO 이므로 D.DEPT_NO = '10' 으로 추론

- 조건절 이행을 통해 아래와 같은 형태로 변환

SELECT *

   FROM MINA.DEPT D, MINA.EMP E

 WHERE E.JOB = 'MANAGER'

     AND E.DEPT_NO = '10'

     AND D.DEPT_NO = '10';