[connect_by]_ORACLE_계층 형 함수 사용(메뉴트리)

2022. 11. 21. 15:06[DB]/[Oracle]_DB

728x90
반응형

개요

ORACLE 에서 제공하는 계층형 함수인 connect by 탐구

 

메뉴 정보 테이블에서 메뉴트리 쿼리 생성해보기


의의

보통 트리형 구조( 메뉴트리 ) 와 같은 데이터에 사용

데이터의 부모, 자식 간의 관계를 통해 depth 구분할 때 유용합니다.


문법

START WITH : 계층 구조를 만들 주체

CONNECT BY : 각 데이터의 연결 관계 설정

PRIOR : CONNECT BY 에 사용하며 지정된 컬럼이 부모- 자식의 관계를 가집니다.

ORDER SIBLINGS : 계층형 쿼리에서의 정렬을 수행합니다.


예제

1. 태이블 설계

메뉴정보를 입력할 테이블을 구성합니다.

메뉴를 구별할 PK 인 MENU_ID

메뉴 이름인 MENU_NM 

부모의 메뉴 아이디를 저장할 HIGH_MENU_ID

 

로 3가지 컬럼을 가진 테이블을 생성합니다.

 

2. 데이터 조회

가상의 데이터를 다음과 같이 입력합니다.

대메뉴의 상위 메뉴가 될 Y000000 ID 가 있습니다.

3. connect by 사용

SELECT LEVEL AS LEV
     ,MENU_ID
     ,MENU_NM
    ,HIGH_MENU_ID
FROM YN_MENU_INFO
START WITH MENU_ID = 'Y000000'
CONNECT BY PRIOR MENU_ID = HIGH_MENU_ID
ORDER SIBLINGS BY MENU_ID

LEV1 지정

 

START WITH 로 menu_id 가 'Y000000' 이 lev 1 로 시작하게 됩니다.

 

LEV2 지정

 

CONNECT BY PRIOR 로

MENU_ID - 부모

HIGH_MENU_ID - 자식

을 지정하게 되고.

 

LEV1 의 ID 인 'Y000000' 으로 시작하여

자식컬럼 (HIGH_MENU_ID) 의 값이 MENU_ID ('Y000000') 이 같은 값을 LEV 2 로 지정하게 됩니다.

 

LEV3 지정

LEV2 의 행위 반복.

...

 

ORDER SIBLINGS BY 로 MENU_ID 순서로 정렬합니다.

 

이를 LEV 로 정렬시 다음과 같습니다.

 

이를 조회하여 lev 별 메뉴 트리를 구성할 수 있습니다.

 

 

다음에는 해당 월의 날자조회를 Connect by 를 사용하여 조회하는 방법을 알아보겠습니다.

 

감사합니다.

728x90
반응형