개발/데이터베이스

[Oracle] 계층형 쿼리

JaeHoist 2022. 12. 27. 15:50

계층형 쿼리란?

상하 수직 관계의 구조(트리 형태)로 이루어진  구조. 이 구조를 만드는 쿼리가 계층형 쿼리이다.

(ex: 부서 밑에 하위 부서)

계층형 쿼리 구조

SELECT [컬럼]...
FROM [테이블]
WHERE [조건]
START WITH [최상위 조건]
CONNECT BY [NOCYCLE][PRIOR 계층형 구조 조건];

사용 예시

CREATE TABLE DEP (
     DEP_CD NUMBER NOT NULL, -- 부서코드
     PARENT_CD NUMBER, -- 상위부서 코드
     DEPT_NAME VARCHAR2(100) NOT NULL, -- 부서이름
     PRIMARY KEY (DEP_CD)
);

 

SELECT
DEPT_NAME,
DEP_CD,
PARENT_CD,
LEVEL
FROM DEP
START WITH PARENT_CD IS NULL --최상위노드 설정,
CONNECT BY PRIOR DEP_CD = PARENT_CD;--부모노드와 자식노드 연결

START WITH 조건에 계층형 구조 최상위 계층의 로우를 식별하는 조건을 설정한다.(가장 최상위 노드의 PARENT_CD가 NULL값이므로 PARENT_CD IS NULL로 조건 설정)

CONNECT BY 조건에 상위 부서와 연결되는 조건을 설정해준다.

 

*레벨의사컬럼 활용

각 레벨별로 들여쓰기를 하여 좀 더 직관적으로 데이터를 표현할 수 있다.

SELECT
LPAD(' ', 2*(LEVEL-1)) || DEPT_NAME AS DEPT_NAME, --레벨별 들여쓰기
DEP_CD,
PARENT_CD ,
LEVEL
FROM DEP
START WITH PARENT_CD IS NULL --최 상위노드 설정,
CONNECT BY PRIOR DEP_CD = PARENT_CD;--부모노드와 자식노드 연결

출처: https://coding-factory.tistory.com/461