ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ORACLE] 계층형 쿼리
    DATABASE 2019. 1. 10. 13:11

     ▶▷계층형 쿼리

     

    실행순서

    1. START WITH 절

    2. CONNECT BY 절 

    3. WHERE 절

     

    START WITH

    : 처음 시작할 조건

      계층의 부모(최상위) 행을 지정

      서브쿼리 사용가능

     

    CONNECT BY

    : START WITH절의 데이터와 연결된 로우를 반복하여 찾기

      상위와 하위의 관계 지정

      서브쿼리 사용 불가능

     

    - PRIOR 컬럼명 : 상위행의 컬럼 의미

    - PRIOR 하위(자식)컬럼 = 상위(부모)컬럼 : 상위에서 하위로 트리 구성 (Top Down)

    - PRIOR 상위컬럼 = 하위컬럼 : 하위에서 상위로 트리 구성 (Bottoom Up)

    - NOCYCLE PRIOR : 무한루프방지(중복막기위해)

     

    CONNECT BY절 다음의 AND조건은 순환 관계를 풀면서 AND 조건을 만족하지 않으면, 그 다음레벨은 더 이상 진행하지 않음을 의미함

     

        FROM절 다음의 AND 조건은 순환구조를 모두 전개 한 후에 조건에 해당하는 로우만 추출

     

    LEVEL

    : 계층의 순서(Depth) 표현

     

    ORDER SIBLINGS BY 

    : 계층구조의 순서 정렬화 (계층구조는 유지하되 하위구조를 정렬화)

     

     

    ▷▶계층형 쿼리 예제 1

    SELECT 
    lec_cd
    , alt_lec_cd
    , LTRIM ( SYS_CONNECT_BY_PATH (lec_cd, ' > '), ' > ' ) AS depth_fullname
    FROM lec030tl
    START WITH lec_cd is not null
    CONNECT BY NOCYCLE PRIOR lec_cd = alt_lec_cd
     

     SYS_CONNECT_BY_PATH (컬럼명, 구분자)

        : 계층구조의 경로를 보여주는 함수

     

    ▷▶계층형 쿼리 예제 2

     

    select 

          CONNECT_BY_ROOT dept_cd as ROOT_NAME 
    from  COM010TL
    where LEVEL>=2
    and up_cd is not null
    and  DEPT_CD = '0434'
    and rownum =1 -- ③ LEVEL이 2 이상이고 dept_cd가 0434이고 rownum이 1 (최상위)인 데이터 추출


    START with up_cd is not  null
    and dept_cd <> '0001' -- ① up_cd가 null이 아니고 dept_cd가 0001이 아닌 데이터로 시작


    CONNECT by PRIOR dept_cd=up_cd -- ② up_cd에서 dept_cd로 트리구성

     

     

     

     

    댓글

Designed by Tistory.