계층형 쿼리란?
상하 수직 관계의 구조(트리 형태)로 이루어진 구조. 이 구조를 만드는 쿼리가 계층형 쿼리이다.
(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
'개발 > 데이터베이스' 카테고리의 다른 글
[Oracle] 시퀀스 캐시 (0) | 2022.12.27 |
---|---|
[Oracle] Connection Pool Error (0) | 2022.12.27 |
[Oracle] mybatis sequence 값 return 받기 (0) | 2022.12.27 |
[Oracle] ORA-01722 문자를 숫자로 반환하는데 오류입니다. (0) | 2022.12.27 |