[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

Tags:

Categories:

Updated:

Leave a comment