[SQL] 089. 계층형 질의문으로 서열을 주고 데이터 출력하기
Updated:
초보자를 위한 SQL 200제 교재를 토대로 공부한 내용입니다.
오라클 SQL을 기반으로 합니다.
실습에 사용한 테이블은 정보문화사 홈페이지에서 받을 수 있습니다.
[예시]
이번 챕터에선 데이터를 선택하여 계층 순서로 결과를 출력한다.
아래 예시는 사원들 간의 서열을 출력한다.
START WITH에 ENAME이 KING인 경우를 최상위 레벨 1로 설정한다.
CONNECT BY PRIOR로 상위 레벨의 컬럼과 하위 레벨 컬럼을 비교한다.
-
KING은 최상위 레벨로 설정하여 레벨이 1이다.
-
KING의 사원번호 7839를 관리자번호로 가지는 JONES, BLAKE, CLARK은 레벨 2로 설정된다.
-
레벨 2의 사원번호를 관리자번호로 가지면 레벨 3 등으로 과정을 반복한다.
-- 기본 옵션으로 사용
-- AUTOCOMMIT 끄기
SET AUTOCOMMIT OFF;
-- 날짜 출력 포맷 변경
ALTER SESSION SET NLS_DATE_FORMAT = 'RRRR-MM-DD';
-- START WITH CONNECT BY PRIOR
SELECT RPAD('-', LEVEL*2, '-') || ENAME AS EMPLOYEE, LEVEL, EMPNO, MGR
FROM EMP
START WITH ENAME = 'KING'
CONNECT BY PRIOR EMPNO = MGR;
[결과]
| EMPLOYEE | LEVEL | EMPNO | MGR |
|---|---|---|---|
| –KING | 1 | 7839 | |
| —-JONES | 2 | 7566 | 7839 |
| ——SCOTT | 3 | 7788 | 7566 |
| ——–ADAMS | 4 | 7876 | 7788 |
| ——FORD | 3 | 7902 | 7566 |
| ——–SMITH | 4 | 7369 | 7902 |
| —-BLAKE | 2 | 7698 | 7839 |
| ——ALLEN | 3 | 7499 | 7698 |
| ——WARD | 3 | 7521 | 7698 |
| ——MARTIN | 3 | 7654 | 7698 |
| ——TURNER | 3 | 7844 | 7698 |
| ——JAMES | 3 | 7900 | 7698 |
| —-CLARK | 2 | 7782 | 7839 |
| ——MILLER | 3 | 7934 | 7782 |
Leave a comment