CONNECT BY LEVEL 활용

sylvie·2022년 1월 4일
0

ORACLE

목록 보기
1/6

CONNECT BY LEVEL

CONNECT BY LEVEL을 어떨 때 활용하면 좋을까?
CONNECT BY 계층적 쿼리는 오라클만이 가진 기능 중 하나이다.
level은 오라클에서 실행되는 모든 쿼리 내에서 사용 가능한 가상열로서, 트리 내에서 어떤 단계(level)에 있는지를 나타내는 정수값이다.

CONNECT BY

CONNECT BY 계층적 쿼리는 오라클만이 가진 기능 중 하나이다.

LEVEL

level은 가상 열이며, 트리 내에서 어떤 단계(level)에 있는지를 나타내는 정수값이다.
계층적인 쿼리가 아니라면 다음과 같이 모든 값이 0, 즉 같은 단계를 가질 것이다.

예를 들면 다음과 같다.

SELECT 직원,level
FROM 직원
직원level
철수0
순희0
지수0

connect by lebel 을 활용하는 예제는 다음과 같다.

CONNECT BY LEVEL 활용 예제

1. 1~10까지 연속된 숫자 조회

SELECT LEVEL AS NO
FROM DUAL
CONNECT BY LEVEL <=10
NO
1
2
3
4
5
6
7
8
9
10

2. 2022년 1월부터 12월까지 출력

SELECT '2022 년 '||LPAD(LEVEL, 2, 0)||'월' AS NO
    FROM DUAL 
CONNECT BY LEVEL <=12
NO
2022년 1월
2022년 2월
2022년 3월
2022년 4월
2022년 5월
2022년 6월
2022년 7월
2022년 8월
2022년 9월
2022년 10월
2022년 11월
2022년 12월

3. 특정 날짜 구간 조회하기

특정 날짜 구간의 날짜 리스트를 구할 수도 있다.
ex) 2022년 1월 1일 ~ 2022년 1월 10일
from = 2022년 1월 1일 , to = 2022년 1월 10일

SELECT
TO_DATE('from날짜', 'YYYYMMDD') + (LEVEL-1) AS DT
FROM DUAL
CONNECT BY LEVEL <= ( TO_DATE('from날짜','YYYYMMDD') - TO_DATE('To날짜','YYYYMMDD') ) + 1

SELECT 
	TO_DATE('20220101', 'YYYYMMDD') + (LEVEL-1) AS DT
FROM DUAL
CONNECT BY LEVEL <= ( TO_DATE('20220110','YYYYMMDD') - TO_DATE('from날짜','YYYYMMDD') ) + 1
DT
2022-01-01
2022-01-02
2022-01-03
2022-01-04
2022-01-05
2022-01-06
2022-01-07
2022-01-08
2022-01-09
2022-01-10

0개의 댓글