Programming/Oracle

계층형쿼리(START WITH ~ CONNECT BY사용법)

초록깨비 2021. 11. 3. 16:07
728x90

[ 계층형쿼리 작성  방법 ] 

 

SELECT [컬럼명]

  FROM [테이블명]

WHERE [ 조건절 ] 

START WITH [ 최상위 조건 ] 

CONNECT BY [NOCYCLE] [ PRIOR 계층형 구조 조건 ] 

ORDER SIBLINGS BY [ 컬럼명 ] 

 

 

1) START WITH

    계층의 최상위 조건(ROOT)으로 사용될 데이터를 지정

 

2) CONNECT BY

    상위계층과 하위계층 조건절 표시

 

    CONNECT BY PRIOR 자식컬럼 = 부모컬럼

          -> 부모에서 자식으로 트리 구성(TOP-DOWN방식)

    CONNECT BY PRIOR 부모컬럼 = 자식컬럼 

          -> 자식에서 부모로 트리 구성(BOTTOM-UP방식)

 

    NOCYCLE : 무한 루프 방지

 

3) ORDER SLBLINGS BY 

    사전순으로 정렬하는것이 아닌 계층구조에 최적화된 상태로 데이타 정렬 

 

 

 

예제)

   

메뉴ID 메뉴명 메뉴순서 상위메뉴ID
0 메뉴 001  
1 조회 001 0
2 계좌조회 001 1
3 거래내역조회 002 1
4 이체 002 0

 

    SELECT A.*

     FROM 메뉴 A

   START WITH 메뉴ID = 0

   CONNECT BY PRIOR 메뉴ID = 상위메뉴ID

   ORDER SIBLINGS BY A.메뉴순서

 

 

 

728x90