[SQL/ORACLE] 계층형 쿼리

bin·2023년 1월 13일
0
SELECT *
FROM EMP
ORDER BY MGR DESC;

전체 행을 조회해보면 KING의 MGR이 NULL이므로 최상위 노드임을 알 수 있다.
그러므로 (계층형 쿼리의 시작 행을 지정하는) START WITH절에 MGR IS NULL 이라는 조건을 넣어주면 KING을 필두로 계층형 구조를 만들 수 있다.

CONNECT BY절 사용

SELECT EMPNO, LEVEL, LPAD(' ', 3*(LEVEL - 1)) || ENAME AS CONNECTBY /* CONCAT, || : 문자열 합치기 */
FROM EMP
START WITH MGR IS NULL /* 시작 행 */ 
CONNECT BY PRIOR EMPNO = MGR; /* PRIOR : 이전 결과 컬럼을 참조하는 키워드 / 위 행의 EMPNO을 MGR로 가지는 행을 연결 */*/

SELECT LEVEL, T1.EMPNO, T1.MGR, T1.JOB, LPAD(' ', (LEVEL-1)*2, ' ') || ENAME AS HIERARCHY /* LPAD(값, 길이, 길이-값만큼 왼쪽부터 채울 값)*/
FROM SCOTT.EMP T1
START WITH T1.EMPNO = 7839
CONNECT BY PRIOR T1.EMPNO = T1.MGR /*해당 EMPNO 값을 MGR 값으로 갖는 행 없을 때 까지 계속 조회 */
ORDER BY T1.EMPNO;

0개의 댓글