[SQLD/P] 계층형 쿼리

Hyo Kyun Lee·2022년 12월 5일
0

SQLD/P

목록 보기
59/82

1. 개요

SQL을 통해 계층형 구조를 생성한다는 것은 두가지 의미를 가지고 있다.

첫번째는 상위(부모)항목에서 하위(자식)항목으로 이어지는 tree 구조의 자료를 만드는 과정이다.

두번째는 계층구조보다는 반복문을 만드는데 초점을 두어 관련 쿼리를 생성하는 과정이다(※이 경우도 이론적으로는 계층구조를 생성한다).

2-1. 계층구조

SQL을 통해 계층구조를 만드는데 초점을 둔다.

말 그대로 자료의 계층을 SQL을 통해 나누는 과정이며, 동일한 계층(LEVEL)에 속하는 항목들은 형제노드(siblings)라 한다.

위 구조에서 상위계층(부모)과 하위계층(자식)으로 나뉘는 것을 볼 수 있다.

SELECT COLUMN1, COLUMN2
FROM TABLE
START WITH COLUMN2 is null
CONNECT BY PRIOR COLUMN1 = COLUMN2
ORDER BY SIBLINGS COLUMN2 DESC

계층구조에 초점을 둔 쿼리는 위와 같이 START WITH와 CONNECT BY 구문을 사용하는 것을 볼 수 있다.

2-1. 계층구조쿼리에서 유의사항

START WITH는 최상위(루트) 노드를 지정해줄 수 있고, CONNECT BY는 해당 상위루트에서 시작하여 최하위루트까지 계층구조를 만들어주는 일종의 반복문이다(반복문에 초점을 둔 쿼리에서 그대로 사용하는 구문).

계층구조의 생성은 최하위루트가 나타날때까지 반복하고, 그 이후의 반복은 최상위루트 바로 아래 계층(차상위루트)에서 진행한다.

ORDER BY SIBLINGS는 동일한 계층에 있는 노드들을 기준으로 정렬하는 구문이다. 말그대로 계층구조에 따라 정렬할 수 있고, DESC를 기재할 경우 해당 COLUMN에 대해 내림차순으로 정렬한다.

3-1. 반복문

SQL을 통해 반복문을 만드는데 초점을 둔다.

자료의 계층구조를 생성하기보다는, CONNECT BY을 이용해 반복문을 만드는데 초점을 두는 과정이다.

위 구조처럼 단순 반복문을 위한 SQL의 경우, LEVEL / CONNECT BY 구문을 사용하여 만들 수 있다.

3-2. 유의사항

SELECT LPAD(LEVEL, 5, '0')
FROM DUAL
CONNECT BY LEVEL < 10

START WITH를 기재하지 않고, CONNECT BY 구문만 활용하여 반복문을 구성할 수 있다(계층형 쿼리에서 CONNECT BY는 필수구문, START WITH는 필수는 아니다).

최상위 루트이자, 반복인자의 시작값은 1이다.

이론상으로는 일종의 계층구조이지만, 실제 활용은 반복문을 생성하는데 그 목적이 있다.

4. 참고자료

계층형 쿼리 개념 - https://tragramming.tistory.com/82
계층형 쿼리 개념 / ORDER BY SIBLINGS - https://dongdongfather.tistory.com/136
반복문 쿼리(CONNECT BY)와 계층구조 - https://velog.io/@seulgi/CONNECT-BY-LEVEL-%ED%99%9C%EC%9A%A9

0개의 댓글