2014. 10. 14. 22:03

계층형 쿼리

데이터 조회시 상하위 관계를 표시해 상하 관계를 파악하고자 할 때 사용한다. 


주요문법

select lpad(dname,level*6,'*") 부서명

from dept2

connect by prior dcode=pdept

start with dcode=0001;


lpad(dname,level*6) 부서명

dname 컬럼을 level*6 바이트 길이로 출력하고, 

왼쪽 빈자리는 *로 채워라


사장실은 최상위 레벨 1

1*6 바이트 = 6바이트

사장실 : 한글이라서 1글자에 2바이트 차지

그래서 그대로 사장실이라고 출력된다. 


경영지원부는 사장실 아래의 레벨 2

2*6 바이트 = 12 바이트

왼쪽 빈자리를 lpad의 * 로 채우고, 원래 경영지원부는 그대로 출력해준다.


level 이란?

오라클의 모든  sql에서 사용할 수 있는 것,

해당데이터가 몇 번째 단계인지 의미한다.


connect by prior 

각 행들이 어떻게 연결되어야 하는지 조건을 지정하는 부분이다. 

dcode=pdept의 조건을 주었다. 


prior?

해당 키워드가 설정되어 있는 컬럼에서 바로 이전의 데이터 값을 찾는데 사용된다.

사용시 prior 값을 어느 쪽에 주는지에 따라 결과값이 달라지므로 유의해야 한다.

 예)


start with dcode=1011;

dcode가 1011인 부서부터 출발해서 이전 행 값의 pdept 코드를 찾아서 부서명을 출력한다. 


'DB > oralce' 카테고리의 다른 글

sql 시험  (0) 2014.10.15
2장 내가 못푼 쿼리문 - 설명을 덧붙일 것  (0) 2014.10.15
plsql cursor 연습문제 정답  (0) 2014.10.14
오라클 테스트 계정 scott lock 풀기  (0) 2014.09.29
rac설치 raw device  (0) 2014.09.19
Posted by 성장하는yw