Oracle DBA/SQL

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

Nuez 2023. 7. 10. 11:47
반응형

계층형 질의문에서 서열의 틀을 깨트리지 않으면서 데이터를 정렬하는 방법

 

(ORDER BY절에 특별한 키워드를 하나 기술해야 함) 


예제1. 다음과 같이 사원 테이블의 전체 서열을 출력하시오. 

SELECT LEVEL, rpad(' ', (LEVEL-1)*2)|| ename AS employee, sal
FROM emp
START WITH ename = 'KING'
CONNECT BY PRIOR empno = mgr ;

예제2. 위의 결과를 다시 출력하는데, 월급이 높은 사원부터 출력하시오. 

SELECT LEVEL, rpad(' ', (LEVEL-1)*2)|| ename AS employee, sal
FROM emp
START WITH ename = 'KING'
CONNECT BY PRIOR empno = mgr
ORDER BY 3 DESC;

 

맨 마지막에 수행되는 ORDER BY 절에 의해서 정렬되느라,

누가 누구의 팀원, 팀장인지 서열 순서 확인 불가 (계층형 질의문 사용 의미가 없어짐)


예제 3. 누가 누구의 팀원인지에 대한 서열 구조는 그대로 유지하면서 월급이 높은 사원부터 출력되게 하시오. 

 

해결 키워드 : SIBLINGS

 

SELECT LEVEL, rpad(' ', (LEVEL-1)*2)|| ename AS employee, sal
FROM emp
START WITH ename = 'KING'
CONNECT BY PRIOR empno = mgr
ORDER SIBLINGS BY 3 DESC;

 

BLAKE의 팀원들보면(8~12행) 정렬이 잘 된것을 확인할 수 있음.

같은 팀 내에서 월급 기준 정렬


문제 507. 위의 결과를 employees 테이블로 출력하시오.

SELECT LEVEL, rpad(' ', (LEVEL-1)*2)|| first_name AS employee, salary
FROM employees
START WITH manager_id IS NULL
CONNECT BY PRIOR employee_id = manager_id
ORDER SIBLINGS BY salary DESC;