본문 바로가기

DB/SQLD

[SQLD] SQL 활용 - Connect by(계층형 조회)

∙ 계층형 조회는 Oracle DB에서 지원하는 것으로 계층형으로 데이터를 조회할 수 있다.

∙ 예를 들어 부장에서 차장, 차장에서 과장, 과장에서 대리, 대리에서 사원 순으로 트리 형태의 구조를 위에서 아래로 탐색하면서 조회하는 것이다. 역방향 조회도 가능하다.

 

∙ Connect by는 트리(Tree) 형태의 구조로 질의를 수행하는 것으로 START WITH구는 시작조건을 의미하고, CONNECT BY PRIOR는 조인 조건이다. Root 노드로부터 하위 노드의 질의를 실행한다.

 

∙ 계층형 조회에서 최대 계층의 수를 구하기 위한 문제, MAX(LEVEL)을 사용하여 최대 계층 수를 구한다. (즉, 게층형 구조에서 마지막 Leaf Node의 계층 값을 구한다.

 

SQL에서 MAX(LEVEL)이 4이므로 트리의 최대 깊이가 4이다.

 

 

- EMPLOYEE_ID와 MANAGER_ID 칼럼 모두 사원번호가 입력되어 있다.

- MANAGER_ID는 관리자 사원번호를 가지고 있다.

 

 

계층형 조회 결과를 명확히 보기 위해서 LPAD 함수를 사용

- 위를 보면 4 * LEVEL-1 이 있다. LEVEL의 값은 Root이면 1이 된다. ( 4 * (1-1) = 0 )

- 즉, Root일 때는 LPAD(' ', 0) 이므로 아무런 의미가 없다.

- 하지만 LEVEL 값이 2가 되면 4 * (2-1) = 4가 된다. LPAD(' ', 4)이므로 왼쪽 공백 4칸을 화면에 찍는다.

- 결과적으로 LPAD는 트리 형태로 보기 위해서 사용한 것이다.

- 왜냐하면 LEVEL 값은 Root에 1을 되돌리고 그다음 자식은 2, 그리고 그 다음 자식은 3이 나오기 때문이다.

 

키워드 설명
LEVEL 검색 항목의 깊이를 의미한다. 즉, 계층구조에서 가장 상위 레벨 1이 된다.
CONNECT_BY_ROOT 계층구조에서 가장 최상위 값을 표시한다.
CONNECT_BY_ISLEAF 계층구조에서 가장 최하위를 표시한다.
SYS_CONNECT_BY_PATH 계층구조의 전체 전개 경로를 표시한다.
NOCYCLE 순환구조가 발생지점까지만 전개된다.
CONNECT_BY_ISCYCLE 순환구조 발생 지점을 표시한다.

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

[SQLD] SQL 활용 - Table Partition  (0) 2020.03.21
[SQLD] SQL 활용 - Window Function  (0) 2020.03.12
[SQLD] SQL 활용 - Group Function  (0) 2020.03.12
[SQLD] SQL 활용 - Subquery  (0) 2020.03.11
[SQLD] SQL 활용 - Join  (0) 2020.03.11