송민준의 개발노트

DB 계층구조(level) 본문

DB

DB 계층구조(level)

송민준 2019. 10. 31. 17:07

계층형 쿼리(Hierarchical Query)는 오라클에서만 지원하는 기능이다.

 

관계형(relational)이라는 의미가 서로 평등하고 수평적인 관계를 의미하는 반면 계층형(hirearchical) 구조는 이와는 다르게 평등한 관계가 아닌 수직적인 관계를 가진다. 한마디로 말해서 관계형이 평면적이라 한다면 계층형은 수직적 구조라 할수있다.

 

계층형 정보에는 사회적인 의미의 계급구조, 등이 있고

소프트웨어 관점에서 살펴보면, 웹사이트에서 사용하는 답변형 게시판이나 BOM(Bill Of Material)등이 계층형 정보의 전형적인 예이다.

 

예를 들어 직원 테이블에 기본키가 사원번호이고 

 

상관번호를 가지고 있다면 계층 구조를 사용할 수 있다.

 

EMP 테이블에서

select level, empno, ename from emp start with mgr is null connect by prior empno = mgr;

사용하면 다음과 같은 결과가 나온다.

제일 상급자는 KING이며 제일 하급자는 ADAMS와 SMITH가 있다.

(start with는 mgr 이 null부터 시작한다는 소리 - 시작 조건임)

계층형 쿼리를 보다 명확히 보기 위해서 LPAD 함수를 사용할 수 있다.(계층별로 공백을 줌)

select level, LPAD('  ', 4 *(LEVEL -1))||empno, ename 
from emp 
start with mgr is null 
connect by prior empno = mgr;

 

connect by 키워드는 아래와 같다.

- LEVEL : 검색 항목의 깊이를 의미한다. 계층구조에서 가장 상위 레벨이 1이 된다.

- CONNECT_BY_ROOT : 계층구조에서 가장 최상위 값을 표시한다.

- CONNECT_BY_ISLEAF : 계층구조에서 가장 최하위 값을 표시한다.

- SYS_CONNECT_BY_PATH : 계층구조의 전체 전개 경로를 표시한다.

- NOCYCLE : 순환구조가 발생지점까지만 전개된다.

- CONNECT_BY_ISCYCLE : 순환구조 발생 지점을 표시한다.

 

참고 블로그

https://m.blog.naver.com/javaking75/220010288704

 

[오라클] 계층형 쿼리 ( START WITH ... CONNECT BY )

계층형 쿼리(Hierarchical Query)는 오라클에서만 지원하고 있는 아주 막강한 기능 중의 하나다. 관계형(...

blog.naver.com