본문 바로가기
오라클/오라클 스터디

계층형 쿼리

by 카리3 2022. 1. 18.

계층형 쿼리

 

계층 쿼리 구조 Syntax

START WITH

  • - 계층 질의의 루트(부모행)로 사용될 행을 지정 한다.
  • - 서브쿼리를 사용할 수도 있다.

CONNECT BY

  • - 이 절을 이용하여 계층 질의에서 상위계층(부모행)과 하위계층(자식행)의 관계를 규정 할 수 있다.
  • PRIOR 연산자와 함께 사용하여 계층구조로 표현할 수 있다.
  • CONNECT BY PRIOR 자식컬럼 = 부모컬럼 : 부모에서 자식으로 트리구성 (Top Down)
  • CONNECT BY PRIOR 부모컬럼 = 자식컬럼 : 자식에서 부모로 트리 구성 (Bottom Up)
  • CONNECT BY NOCYCLE PRIOR : NOCYCLE 파라미터를 이용하여 무한루프 방지
  • - 서브쿼리를 사용할 수 없다.

LEVEL Pseudocolumn

  • - LEVEL은 계층구조 쿼리에서 수행결과의 Depth를 표현하는 의사컬럼이다.

ORDER SIBLINGS BY

  • - ORDER SIBLINGS BY절을 사용하면 계층구조 쿼리에서 편하게 정렬작업을 할 수 있다.

CONNECT BY의 실행순서는 다음과 같다.

  • - 첫째 START WITH 절
  • - 둘째 CONNECT BY 절
  • - 세째 WHERE 절 순서로 풀리게 되어있다.

 

계층 쿼리 활용

1.  CONNECT_BY_ROOT
  계층구조 쿼리에서 LEVEL이 0인 최상위 로우의 정보를 얻어 올 수 있다.
2. CONNECT_BY_ISLEAF
 계층구조 쿼리에서 로우의 최하위 레벨(Leaf) 여부를 반환한다. 최하이 레벨이면 1, 아니면 0
3. SYS_CONNECT_BY_PATH
  계층구조 쿼리에서 현재 로우 까지의 PATH 정보를 쉽게 얻어 올 수 있다.
4. ORDER SIBLINGS BY
  계층구조 쿼리에서 상관관계를 유지하면서 정렬을 할 수 있게 해준다. 아래 예제를 가지고 ORDER SIBLINGS BY와 ORDER BY로 테스트 해보자

 

중요사항

1. 조건
A
  A-1
  A-2
    A-2-1
B
 B-1
 B-2
  B-2-1

1) WHERE : 계층 연결을 하고 나서 행을 제한
   WHERE ORG_CD != 'A-2' --> A-2 만 제외
2) CONNCET BY : 계층 연결을 하는 과정에서 행을 제한하고 계층 연결
   CONNECT BY ORG_CD = PARENT_ORG_CD AND ORG_CD != 'A-2'  --> A-2, A-2-1 제외

2. PRIOR
1) SELECT 절의 PRIOR  :  부모 ROW 컬럼  ex) SELECT PRIOR ORG_CD, ORG_CD
2) CONNECT BY 절의 조건절의 PRIOR ex) CONNECT BY PRIOR BOM_CHILD = BOM_PARENT AND PRIOR BOM_PLANT = PLANT --> 부모  ROW PLANT = PLANT

 

'오라클 > 오라클 스터디' 카테고리의 다른 글

변경된 이전 데이터 확인하기  (0) 2020.08.09