본문 바로가기

나 취준생/SQL

SQL - 계층형 질의문 2

320x100

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


계층형 질의문과 짝꿍 함수인 sys_connect_by_path를 이용하면


listagg를 사용한 것처럼 가로로 결과를 출력할 수 있다.


예제 : 사원들의 노드 경로를 가로로 출력하기

select ename, sys_connect_by_path(ename,',') 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;




** 계층형 질의문을 작성할 때 반드시 알아야하는 두 가지 짝꿍 키워드


1. order by 절의 siblings

2. 서열을 가로로 출력하는 sys_connect_by_path 함수




계층형 질의문에서도 조인 문장을 같이 쓸 수 있다.


예제 : 이름, 서열, 월급과 부서위치를 출력하기


select rpad(' ',level*2) || ename as employee, level, e.sal, d.loc

 from emp e, dept d

 where e.deptno = d.deptno                                             <-- 조인 조건 (연결 고리 )

 start with ename='KING'

 connect by prior empno = mgr;




예제 : 이름, 서열, 월급, 급여 등급(grade)를 출력하기


select rpad(' ',level*2) || ename as employee, level, e.sal, s.grade

 from emp e, salgrade s

 where e.sal between s.losal and s.hisal

 start with ename='KING'

 connect by prior empno = mgr;



예제 : 위의 결과를 다시 출력하는데 서열의 정렬을 유지하면서 급여등급이 높은 사원부터 출력하기


select rpad(' ',level*2) || ename as employee, level, e.sal, s.grade

 from emp e, salgrade s

 where e.sal between s.losal and s.hisal

 start with ename='KING'

 connect by prior empno = mgr

 order siblings by s.grade desc;



예제 : DALLAS에서 근무하는 사원들의 이름, 서열, 부서위치를 출력하기 ( 서열은 전체 사원을 기준으로 )


select rpad(' ',level*2) || ename as employee, level, d.loc

 from emp e, dept d

 where e.deptno=d.deptno and d.loc = 'DALLAS'

 start with ename='KING'

 connect by prior empno = mgr;



반응형

'나 취준생 > SQL' 카테고리의 다른 글

SQL - 치환 변수 (&)  (0) 2020.11.10
SQL - 테이블 생성  (0) 2020.11.09
SQL - 계층형 질의문 1  (0) 2020.11.09
SQL - 데이터 입력, 수정, 저장  (0) 2020.11.08
SQL - 서브 쿼리  (0) 2020.11.08