본문 바로가기
IT/Oracle

[Oracle] - 오라클 계층형 쿼리(START WITH ~ CONNECT BY PRIOR 구문) 사용법

by 차이나는 개발자 2022. 8. 1.
728x90
반응형

#오라클 계층형 쿼리(START WITH ~ CONNECT BY PRIOR 구문) 사용법

 

 

#Oracle 계층형 쿼리 실습

 

1. 실습 테이블 생성 쿼리입니다.

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

 

 

2. 실습 데이터 생성 쿼리입니다.

INSERT INTO DEPT_TABLE VALUES ( 101, NULL, '회사');
INSERT INTO DEPT_TABLE VALUES ( 102, 101, '개발팀');
INSERT INTO DEPT_TABLE VALUES ( 103, 101, '영업팀');
INSERT INTO DEPT_TABLE VALUES ( 104, 101, '마케팅팀');
INSERT INTO DEPT_TABLE VALUES ( 105, 101, '솔루션팀');

INSERT INTO DEPT_TABLE VALUES ( 106, 102, '개발1팀');
INSERT INTO DEPT_TABLE VALUES ( 107, 102, '개발2팀');
INSERT INTO DEPT_TABLE VALUES ( 108, 102, '개발3팀');

INSERT INTO DEPT_TABLE VALUES ( 109, 103, '영업1팀');

INSERT INTO DEPT_TABLE VALUES ( 110, 104, '마케팅1팀');
INSERT INTO DEPT_TABLE VALUES ( 111, 104, '마케팅2팀');

INSERT INTO DEPT_TABLE VALUES ( 112, 105, '솔루션1팀');
INSERT INTO DEPT_TABLE VALUES ( 113, 105, '솔루션2팀');
INSERT INTO DEPT_TABLE VALUES ( 114, 105, '솔루션3팀');

 

 

3. 계층형 쿼리 작성 쿼리입니다.

SELECT 
LPAD(' ', 4*(LEVEL-1)) || DEPT_NAME AS DEPT_NAME, 
CONNECT_BY_ROOT(DEPT_CD),
DEPT_CD,
PARENT_CD,
LEVEL
FROM DEPT_TABLE 
START WITH PARENT_CD IS NULL 
CONNECT BY PRIOR DEPT_CD = PARENT_CD;

 

 

4. 결과

-START WITH 

최상위 노드를 지정합니다.

-CONNECT BY PRIOR

이전행의 DEPT_CD와 현재행의 PARENT_CD가 같으면 연결합니다.

-CONNECT_BY_ROOT

계층의 최상위 노드값을 반환합니다.

 

 

 

728x90
반응형

댓글