091 계층형 질의문으로 서열을 주고 데이터 출력하기 3(데이터 정렬)
복습문제. 이름과 월급을 출력하는데 월급이 높은 사원부터 출력하시오
select ename, sal
from emp
order by sal desc;
복습문제. KING을 시작으로 해서 서열을 부여한 결과를 출력하는데 이름, 서열, 직업, 월급을 출력하시오
select rpad(' ',level*3)||ename as employee, level, job, sal
from emp
start with ename = 'KING'
connect by prior empno = mgr;
문제474. 위의 결과를 다시 출력하는데 서열에 대한 시각화된 틀이 흐트러지지 않는 범위 내에서 월급이 높은 사원순으로 결과를 출력하시오
select rpad(' ',level*3)||ename as employee, level, job, sal
from emp
start with ename = 'KING'
connect by prior empno = mgr
order siblings by sal desc;
order siblings by 옵션을 주면 서열을 유지하면서 정렬됨 > 계층형 질의문에서 siblings 필수
문제475. 이름, 서열, 입사일을 출력하는데 서열을 유지한 상태에서 최근에 입사한 사원부터 출력하시오
select rpad(' ',level*3)||ename as employee, level, hiredate
from emp
start with ename = 'KING'
connect by prior empno = mgr
order siblings by hiredate desc;
092 계층형 질의문으로 서열을 주고 데이터 출력하기 4 (sys_connect_by함수)
계층형 질의문과 짝꿍인 문법 2가지
1. order sibling by
2. sys_connect_by path
sys_connect_by 함수는 앞에서 배웠던 listagg처럼 데이터를 가로로 출력하는 함수
--예제
select ename, sys_connect_by_path(ename,'/') as path
from emp
start with ename = 'KING'
connect by prior empno = mgr;
서열순으로 이름을 가로로 출력
문제476. 위의 결과를 다시 출력하는데 앞에 슬러시(/)를 잘라내서 다음과 같이 출력하시오.
-- 내가 쓴 코드
select ename, substr(sys_connect_by_path(ename,'/'),2) as path
from emp
start with ename = 'KING'
connect by prior empno = mgr;
-- 다른 사람이 쓴 코드
select ename, ltrim(sys_connect_by_path(ename,'/'),'/') as path
from emp
start with ename = 'KING'
connect by prior empno = mgr;
반응형
'Study > class note' 카테고리의 다른 글
문제6. SQL / 새로운 컬럼에 값을 갱신할 때 null값 없애기 (0) | 2021.11.23 |
---|---|
sql중급 / DDL문(create) (0) | 2021.11.23 |
문제5. SQL / 서브쿼리 튜닝 및 조인 (0) | 2021.11.22 |
sql중급 / 계층형 질의문1,2 (0) | 2021.11.22 |
sql중급 / 서브쿼리를 사용한 update, delete, merge (0) | 2021.11.22 |