[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