본문 바로가기

프로그래밍/oracle

oracle - 실행계획 SQL연산(OUTER JOIN)

반응형

실행계획 SQL연산(OUTER JOIN)


Outer Join이란 드라이빙 테이블과 조인되는 테이블에 조건을 만족하는 데이터가 없더라도 드라이빙 테이블의 데이터를 출력하는 조인의 방식입니다. (흔히 오라클인 경우 꼭 나타나야 하는 반대쪽에 더하기 표시를 합니다.)


즉 Outer Join에서 (+) 표시가 붙지 않은 테이블이 드라이빙 테이블이 되는 거죠~


SQL> SELECT E.ENAME 사원명,

               M.ENAME 관리자,

               E.SAL 급여

      FROM EMP E, EMP M

      WHERE E.MGR = M.EMPNO(+);



Execution Plan

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

SELECT STATEMENT Optimizer=CHOOSE

NESTED LOOP(OUTER)

  TABLE ACCESS (FULL) OF ‘EMP’                -? Alias ‘E’

  TABLE ACCESS (BY INDEX ROWID) OF ‘EMP’    -? Alias ‘M’

    INDEX (UNIQUE SCAN) OF ‘pk_emp’ (UNIQUE)


Outer Join의 경우 NESTED LOOP, MERGE JOIN, HASH JOIN과 동반하여 나타나는데 아래는 Merge Join과 Outer Join이 같이 나타나는 경우의 예입니다.


SQL> SELECT /*+ USE_MERGE(E, M) */

E.ENAME 사원명,

               M.ENAME 관리자,

               E.SAL 급여

      FROM EMP E, EMP M

      WHERE E.MGR = M.EMPNO(+);



Execution Plan

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

SELECT STATEMENT Optimizer=CHOOSE

MERGE JOIN(OUTER)

  SORT (JOIN)

    TABLE ACCESS (FULL) OF ‘EMP’                -? Alias ‘E’

  SORT (JOIN)

    TABLE ACCESS (FULL) OF ‘EMP’    -? Alias ‘M’

 

 

 

 


반응형