본문 바로가기

Oracle/SQL Query

[Oracle] Connect by 부가 기능

[출처: 오라클 클럽]

Oracle10g에서 CONNECT BY의 새로운 기능들

  오라클팁의 "계층 구조의 조회(Hierarchical Queries)" 강좌에서 CONNECT BY 와 START WITH를 상관관계 쿼리에 대해서 소개를 했었습니다.

  Oracle10g 부터 CONNECT BY 절에서 제공하는 CONNECT_BY_ROOT, SYS_CONNECT_BY_PATH, CONNECT_BY_ISLEAF 기능에 대해서 알아보겠습니다.

상관관계 쿼리 예제

  아래 예제와 같이 계층구조로 조회 할 수 있습니다.

 
SQL> SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename, empno
     FROM emp
     START WITH job='PRESIDENT'
     CONNECT BY PRIOR empno=mgr;
 
ENAME                     EMPNO       MGR        JOB
-------------------- ---------- ---------- ---------
KING                       7839             PRESIDENT
    JONES                  7566      7839   MANAGER
        SCOTT              7788      7566   ANALYST
            ADAMS          7876      7788   CLERK
        FORD               7902      7566   ANALYST
            SMITH          7369      7902   CLERK
   
    

CONNECT_BY_ROOT

  상관관계 쿼리에서 LEVEL이 0인 최상위 로우의 정보를 얻어 올 수 있습니다.

 
SQL> SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename, empno,
     CONNECT_BY_ROOT  empno "Root empno", level
     FROM emp
     START WITH job='PRESIDENT'
     CONNECT BY PRIOR empno=mgr;
 
ENAME                    EMPNO  Root empno     LEVEL
-------------------- ---------- ---------- ----------
KING                      7839       7839          1
    JONES                 7566       7839          2
        SCOTT             7788       7839          3
            ADAMS         7876       7839          4
        FORD              7902       7839          3
            SMITH         7369       7839          4  
    

SYS_CONNECT_BY_PATH

  상관관계 쿼리에서 현재 로우 까지의 PATH 정보를 쉽게 얻어 올 수 있습니다.

 
SQL> COL path FORMAT A40
 
SQL> SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename, empno,
     SYS_CONNECT_BY_PATH(ename, '/') "Path"
     FROM emp
     START WITH job='PRESIDENT'
     CONNECT BY PRIOR empno=mgr; 
 
ENAME                    EMPNO    Path
-------------------- ---------- -------------------------------
KING                      7839    /KING
    JONES                 7566    /KING/JONES
        SCOTT             7788    /KING/JONES/SCOTT
            ADAMS         7876    /KING/JONES/SCOTT/ADAMS
        FORD              7902    /KING/JONES/FORD
            SMITH         7369    /KING/JONES/FORD/SMITH  
    

CONNECT_BY_ISLEAF

  상관관계 쿼리에서 로우의 최하위 레벨 여부를 반환 합니다.

 
SQL> SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename, empno,
     CONNECT_BY_ISLEAF "leaf", level
     FROM emp
     START WITH job='PRESIDENT'
     CONNECT BY NOCYCLE PRIOR empno=mgr;
 
ENAME                   EMPNO       leaf      LEVEL
-------------------- ---------- ---------- ----------
KING                      7839          0          1
    JONES                 7566          0          2
        SCOTT             7788          0          3
            ADAMS         7876          1          4
        FORD              7902          0          3
            SMITH         7369          1          4  
    

문서에 대하여

  • - 작성자 : 김정식 (oramaster _at_ naver.com)
  • - 작성일 : 2006-04-12
  • - 강좌 URL : http://www.oracleclub.com/lecture/1903
  • - 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
  • 오라클클럽의 모든 강좌는 크리에이티브 커먼즈의 저작자표시-비영리-동일조건변경허락(BY-NC-SA) 라이선스에 따라 자유롭게 사용할 수 있습니다.