[오라클] START WITH 와 CONNECT BY
START WITH 와 CONNECT BY 를 이용하여 데이터를 계층 구조로 조회할 수 있다.
예1)
SELECT LEVEL, EMPNO, ENAME, MGR
FROM EMPSTART WITH JOB = 'PRESIDENT'
CONNECT BY PRIOR EMPNO = MGR;
==> 직업이 PRESIDENT를 기준으로 사원과 관리자의 관계를 계층 구조로 조회
예2)
SELECT LPAD( ' ', 4*(LEVEL-1) ) || ENAME, EMPNO, MGR, JOB
FROM EMP
START WITH JOB = 'PRESIDENT'
CONNECT BY PRIOR EMPNO = MGR;
==> 예1의 결과를 ㅏ지고 LPAD 함수를 이용하여 ENAME 왼쪽에 공백을 추가
예3)
SELECT LPAD( ' ', 4*(LEVEL-1) ) || ENAME, EMPNO, MGR, JOB
FROM EMP
START WITH JOB = 'PRESIDENT'
CONNECT BY PRIOR EMPNO = MGR
AND LEVEL <= 2;
==> LEVEL 2까지만 조회
예4)
SELECT LEVEL, SUM(SAL), COUNT(EMPNO)
FROM EMP
START WITH JOB = 'PRESIDENT'
CONNECT BY PRIOR EMPNO = MGR
GROUP BY LEVEL;
==> LEVEL 별로 급여의 합과 인원수를 조회
※ START WITH : 계층 질의에서 루트(부모행)로 사용될 행을 지정한다.
CONNECT BY : 계층 질의에서 상위계층(부모행)과 하위계층(자식행)의 관계를 지정한다.
※ 실행순서
1. START WITH 절
2. CONNECT BY 절
3. WHERE 절
※ 데이터가 많아 질 경우....
1. START WITH JOB = 'PRESIDENT' 의 JOB 칼럼에 INDEX가 없으면 속도를 보장할 수 없다.
2. CONNECT BY PRIOR EMPNO = MGR 의 PRIOR 쪽의 컬럼값이 상수가 되기 때문에 MGR칼럼에 INDEX를 생성해야 CONNECT BY 의 속도를 보장할 수 있다.
-- 덕분에 필요하던 것이 한번에 해결되었습니다.
[출처] [오라클] START WITH 와 CONNECT BY |작성자 똥강아지