계층형 쿼리
계층 쿼리 구조 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 |
---|