CONNECT BY LEVEL을 어떨 때 활용하면 좋을까?
CONNECT BY 계층적 쿼리는 오라클만이 가진 기능 중 하나이다.
level은 오라클에서 실행되는 모든 쿼리 내에서 사용 가능한 가상열로서, 트리 내에서 어떤 단계(level)에 있는지를 나타내는 정수값이다.
CONNECT BY 계층적 쿼리는 오라클만이 가진 기능 중 하나이다.
level은 가상 열이며, 트리 내에서 어떤 단계(level)에 있는지를 나타내는 정수값이다.
계층적인 쿼리가 아니라면 다음과 같이 모든 값이 0, 즉 같은 단계를 가질 것이다.
예를 들면 다음과 같다.
SELECT 직원,level
FROM 직원
직원 | level |
---|---|
철수 | 0 |
순희 | 0 |
지수 | 0 |
connect by lebel 을 활용하는 예제는 다음과 같다.
SELECT LEVEL AS NO
FROM DUAL
CONNECT BY LEVEL <=10
NO |
---|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
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월 |
특정 날짜 구간의 날짜 리스트를 구할 수도 있다.
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 |