[ Oracle - Connect_By ]

 

 

☞ 예제

         

1. SELECT   column_name, ...
    FROM      table
    START WITH    initial-condition 
    CONNECT BY  [PRIOR] [ NOCYCLE ] recurse-condition ; 

2. 실행순서
    1. START WITH에 의해서 ROOT로 이동한다.
    2. CONNECT BY에 의해 트리를 작성한다.
    3. PRIOR에 기술된 방향으로 트리를 탐색한다.
    4. CONNECT BY의 조건이 적용되어 필요할 때에 트리의 가지를 제외한다.
    5. WHERE 조건을 적용하여 필요 때에 작 행을 제외한다. 
    6. ORDER BY 가 있으면 순서대로 행을 정렬한다.

3. PRIOR : 탐색 방향을 의미한다. 그러므로 부모 노드식 앞에 PRIOR를 붙이면 ROOT방향으로 
                탐색을 한다.

 

☞  * 9i 이상: connect by
      - sys_connect_by_path : 상관관계 쿼리에서 현재 로우 까지의 PATH 정보를 쉽게 얻어 올 수 있습니다.

☞  * 10g 이상: connect by
      - connect_by_root : 상관관계 쿼리에서 LEVEL이 0인 최상위 로우의 정보를 얻어 올 수 있습니다.
      - connect_by_is_leaf : 상관관계 쿼리에서 로우의 최하위 레벨 여부를 반환 합니다.
      - connect_by_iscycle

☞  * 계층 쿼리시 계층별로 정렬하기 위해.. order siblings by 
 
    예) 
select     mnu_srno, mnu_cd, mnu_nm,mnu_lvl, higrk_mnu_cd, cntRow
        
from       tcm_mnuinf01 a , tcm_main b
        
start with b.mnu_lvl = 0  
        
connect by prior b.mnu_cd = b.higrk_mnu_cd
        
order  siblings  by  b.SORT_SEQ
  
    설명) order by 로 sort할 경우 모든 데이터를 가지고 정렬을 하지만
          order  siblings  by 각 계층별로 정렬을 한다.

'(DB) Oracle > SQL.통계-Connect by' 카테고리의 다른 글

Oracle - wm_concat  (0) 2017.01.21
Oracle - connect_by_isleaf  (0) 2017.01.21
Posted by 농부지기
,