[SQL] 091. 계층형 질의문으로 서열을 주고 데이터 출력하기3

Updated:

초보자를 위한 SQL 200제 교재를 토대로 공부한 내용입니다.

오라클 SQL을 기반으로 합니다.

실습에 사용한 테이블은 정보문화사 홈페이지에서 받을 수 있습니다.


[기본 옵션]

-- AUTOCOMMIT 끄기
SET AUTOCOMMIT OFF;

-- 날짜 출력 포맷 변경
ALTER SESSION SET NLS_DATE_FORMAT = 'RRRR-MM-DD';

[예시]

ORDER SIBLINGS BY를 사용하여 서열 순서는 유지하면서 데이터를 정렬해보자.

-- 옵션 적용 전
SELECT RPAD('-', LEVEL*2, '-') || ENAME AS EMPLOYEE, LEVEL, DEPTNO, MGR, SAL
FROM EMP
START WITH ENAME = 'KING'
CONNECT BY PRIOR EMPNO = MGR
ORDER SIBLINGS BY SAL DESC;

[옵션 적용 전 결과]

EMPLOYEE LEVEL DEPTNO MGR SAL
–KING 1 10   5000
—-JONES 2 20 7839 2975
——SCOTT 3 20 7566 3000
——–ADAMS 4 20 7788 1100
——FORD 3 20 7566 3000
——–SMITH 4 20 7902 800
—-BLAKE 2 30 7839 2850
——ALLEN 3 30 7698 1600
——WARD 3 30 7698 1250
——MARTIN 3 30 7698 1250
——TURNER 3 30 7698 1500
——JAMES 3 30 7698 950
—-CLARK 2 10 7839 2450
——MILLER 3 10 7782 1300
-- 옵션 적용 후
-- ORDER SIBLINGS BY: 서열은 유지 하면서 정렬하기 
SELECT RPAD('-', LEVEL*2, '-') || ENAME AS EMPLOYEE, LEVEL, DEPTNO, MGR, SAL
FROM EMP
START WITH ENAME = 'KING'
CONNECT BY PRIOR EMPNO = MGR
ORDER SIBLINGS BY SAL DESC;

[옵션 적용 후 결과]

옵션 적용 후 BLAKE 밑에 레벨 3 직원들의 순서가 바뀌었다.

EMPLOYEE LEVEL DEPTNO MGR SAL
–KING 1 10   5000
—-JONES 2 20 7839 2975
——SCOTT 3 20 7566 3000
——–ADAMS 4 20 7788 1100
——FORD 3 20 7566 3000
——–SMITH 4 20 7902 800
—-BLAKE 2 30 7839 2850
——ALLEN 3 30 7698 1600
——TURNER 3 30 7698 1500
——WARD 3 30 7698 1250
——MARTIN 3 30 7698 1250
——JAMES 3 30 7698 950
—-CLARK 2 10 7839 2450
——MILLER 3 10 7782 1300

Tags:

Categories:

Updated:

Leave a comment