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
반응형
'IT > Oracle' 카테고리의 다른 글
[Oracle] - 오라클 INSTR 함수(문자열에서 문자 인덱스(위치) 반환) 사용법 (0) | 2022.08.08 |
---|---|
[Oracle] - 오라클 정규식 REGEXP_REPLACE 함수 사용법 (0) | 2022.08.03 |
[Oracle] - 오라클 MERGE INTO 사용법 (0) | 2022.07.17 |
[Oracle] - 오라클 rownum 사용법(ORDER BY 정렬 서브쿼리 처리) (0) | 2022.07.15 |
[Oracle] - 오라클 시퀀스(SEQUENCE) 사용법(TO_CHAR FM(Format) 포맷 사용법) (0) | 2022.07.15 |
댓글