본문 바로가기

Study/Oracle

오라클 계층구조(트리구조) START WITH, CONNECT BY

/*****************************************************************

트리구조


START WITH

- 계층 질의의 루트(부모행)로 사용될 행을 지정 합니다.. 

- 서브쿼리를 사용할 수도 있다.


CONNECT BY 

- 이 절을 이용하여 계층 질의에서 상위계층(부모행)과 하위계층(자식행)의 관계를 규정

- 보통 PRIOR 연산자를 많이 사용

- 서브쿼리를 사용할 수 없다


PRIOR 의 위치 

    (1) CONNECT BY PRIOR 자식컬럼 =       부모컬럼  ==> 부모에서 자식으로 트리 구성

    (2) CONNECT BY       자식컬럼 = PRIOR 부모컬럼  ==> 자식에서 부모으로 트리 구성

******************************************************************/

SELECT LEVEL,empno,ename, mgr, job

       FROM  emp

       START WITH job = 'PRESIDENT'   -- 직업이 PRESIDENT를 기준으로

       CONNECT BY PRIOR  empno = mgr; -- 사원(empno)과 관리자(mgr)의  관계를 계층 구조로 조회

       

SELECT level, LPAD(' ', 2*(level-1)) ||  ename ename,  empno, mgr, job

      FROM emp

      START WITH job='PRESIDENT'

      CONNECT BY PRIOR empno=mgr;       



/*****************************************************************

특정 범위를 나열하여 조인하고 싶을때 CONNECT BY LEVEL 을 사용하면 편리

******************************************************************/


-- 1부터 10까지 출력

SELECT LEVEL FROM DUAL CONNECT BY LEVEL <=10;



SELECT LPAD(' ', 1*(LEVEL-1)) || LEVEL FROM DUAL 

CONNECT BY LEVEL <=10;

 

-- 2011년 01월 01일부터 2011년 01월 31일까지 출력쿼리

SELECT TO_DATE('20110101','YYYYMMDD') + LEVEL -1 

  FROM DUAL

CONNECT BY LEVEL <=31;