오라클 계층형 쿼리

이전에 몇번 사용해 본거 같은데 오늘 조직도 관련하여 쓸일이 있어서 기술해 본다.


계층 관계가 있는 칼럼(외래키로 자기자신 테이블을 참조)이 있는 경우 계층 구조를 이용하여 데이터를 추출


select 칼럼 from 테이블 start with 조건 connect by [prior] [nocycle]


형식은 위 쿼리형태이다.


CREATE TABLE JOJIK (

    GROUP_CD VARCHAR2(20)

  , DEPT_CD VARCHAR2(20)

  , DEPT_NM VARCHAR2(50)

  , SUB_DEPT_CD VARCHAR2(20)

);


이렇게 테이블을 구성한뒤


SELECT LEVEL

     , GROUP_CD

     , LPAD(' ',(LEVEL-1)*2,' ')||DEPT_NM

     , DEPT_CD

  FROM JOJIK

 START WITH SUB_DEPT_CD IS NULL

       CONNECT BY PRIOR DEPT_CD = SUB_DEPT_CD

 ORDER BY GROUP_CD, ORDER_SEQ;


이렇게 쿼리를 구성하면 멋지게 다음과 같이 결과가 나온다.




WRITTEN BY
테네시왈츠
항상 겸손하게 항상 새롭게 항상 진실하게

,