-
[SQL 문제] 오라클 계층구조 쿼리의 이해RDS/SQL 문제 2020. 9. 19. 11:39반응형
[문제]
사원번호(empno), 성명(ename), 상사의 사원번호(mgr) 를 가진 테이블 emp가 있습니다. 원본 테이블을 이용하여 계층구조 결과 테이블을 완성하는 쿼리를 작성하세요.
[원본 데이터]
[결과 데이터]
[문제 풀이]
함수를 이용한 재귀 쿼리
12345678910SELECT EMPNO, ENAME, MGR, LEVEL AS LV -- LEVEL은 계층 구조에서 단계를 나타내는 함수, SUBSTR(SYS_CONNECT_BY_PATH(ENAME, '-'), 2) ENAMES -- SYS_CONNECT_BY_PATH는 계층 구조에서 경로를 나타내는 함수, PRIOR ENAME AS MGR_ENAME -- PRIOR는 계층 구조에서 상위값을 나타내는 함수FROM EMPSTART WITH MGR IS NULL -- START WITH 절은 계층 구조의 시작 조건을 주는 조건절CONNECT BY PRIOR EMPNO = MGR -- CONNECT BY 절은 계층 구조의 상하위간의 관계에 대한 조건을 주는 조건절ORDER SIBLINGS BY EMPNO; -- ORDER SIBLINGS BY 절은 계층 구조를 유지하면서 순서만 정렬cs WITH 문을 이용한 재귀 쿼리
123456789101112131415161718192021222324252627WITH TEMP01(EMPNO, ENAME, LV, MGR, MGR_NAME, ENAMES, EMPNOS) AS(SELECT EMPNO, ENAME, 1 AS LV, MGR, '' AS MGR_ENAME, ENAME AS ENAMES, TO_CHAR(EMPNO) AS EMPNOSFROM EMPWHERE MGR IS NULL -- 최상위 데이터UNION ALLSELECT T2.EMPNO, T2.ENAME, T1.LV + 1 LV, T2.MGR, T1.ENAME AS MGR_ENAME, T1.ENAMES || '-' || T2.ENAME AS ENAMES, T1.EMPNOS || '-' || T2.EMPNO AS EMPNOSFROM TEMP01 T1, EMP T2WHERE T1.EMPNO = T2.MGR)SELECT *FROM TEMP01ORDER BY EMPNOS;cs [참고]
반응형'RDS > SQL 문제' 카테고리의 다른 글
[SQL 문제] 분석함수의 이해 (0) 2020.09.06 [SQL 문제] 일별 누적 접속자 통계 구하기 (0) 2020.09.05