본문 바로가기

Study/class note

sql중급 / 계층형 질의문3,4

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;

 

 

반응형