개발/데이터베이스
[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