계층형 쿼리란 트리형태의 구조로 이루어진 형태를 말한다. 회사의 조직도/홈페이지메뉴를 관리하는 테이블이 계층형구조로 되어있다. 메뉴에는 상위메뉴밑에 하위메뉴가있고 또 그아래 메뉴가 존재한다. 계층형 쿼리는 테이블에 저장된 데이터를 계층형 구조로 보여주는 SQL을 말한다.
START WITH .... CONNECT BY 절로 계층형 쿼리를 작성한다.
1. START WITH
2. CONNECT BY
3. WHERE
SELECT [컬럼]
FROM [테이블]
WHERE [조건]
START WITH [최상위 조건]
CONNECT BY [NOCYCLE][PRIOR 계층형 구조 조건]
ORDER SIBLINGS BY [정렬조건]
;
START WITH
계층의 최상위 조건(루트)으로 사용될 ROW데이터를 지정한다.
위 조직도 사진에서는 '총괄개발부'를 찾는 조건이 들어가야한다.
CONNECT BY
상위계층과 하위계층의 관계를 규정하며 PRIOR와 함께 사용한다.
CONNECT BY PRIOR자식컬럼 = 부모컬럼 : 부모에서 자식으로 트리 구성 (Top Down)
CONNECT BY PRIOR부모컬럼 = 자식컬럼 : 자식에서 부모로 트리 구성 (Bottom Up)
Top Down 방식으로 많이 사용한다.
NOCYCLE
CONNECT BY NOCYCLE PRIOR : NOCYCLE 파라미터를 이용하여 무한 루프 방지
LEVEL 컬럼
LEVEL 컬럼은 수행결과의 계층 레벨을 뜻한다. 최상위 레벨이 1이다.
SQL이 메뉴의 계층구조를 나타내는 쿼리라면 LEVEL 컬럼을 이용하여 메뉴명을 들여쓰기하여 보여 줄 수 있다.
ORDER SIBLINGS BY
ORDER BY는 사전순으로 정렬하는 것이라면 ORDER SIBLINGS BY는 사전순만 아니라 계층 구조에 최적화된 상태로 데이터를 정렬시켜준다.
[ORACLE] 날짜 처리 함수 (1) | 2021.11.08 |
---|---|
[ORACLE] 문자열 처리 함수 (2) | 2021.11.05 |
[ORACLE] 모든 테이블, 컬럼 조회 (0) | 2021.11.04 |
[ORACLE] TO_CHAR 기본 사용법 (4) | 2021.10.21 |
[ORACLE] KEEP, RANK, DENSE_RANK, ROW_NUMBER (0) | 2021.09.28 |
댓글 영역