2022. 11. 21. 15:06ㆍ[DB]/[Oracle]_DB
개요
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 를 사용하여 조회하는 방법을 알아보겠습니다.
감사합니다.
'[DB] > [Oracle]_DB' 카테고리의 다른 글
[Connect by]_ 계층형 쿼리 & 재귀 쿼리 응용 ( 이달의 휴일 구하기 ) (0) | 2022.11.28 |
---|---|
[Oracle]_날자 , 요일 추출_그룹 핑 후 순번 매기기 (2) | 2022.10.25 |
[Oracle]_NVL 사용 (DATE,Number) 비교 (0) | 2022.08.29 |
[Oracle]SelectKey_사용하기 (feat. SEQUENCE) (0) | 2022.05.24 |
[Oracle]_SEQUENCE (feat. 테이블 pk) (0) | 2022.05.24 |