[Oracle] SQL로 달력 만들기: CONNECT BY LEVEL을 활용한 날짜 생성 완벽 가이드 개발을 하다 보면 '데이터가 없는 날짜' 까지 포함해서 조회해야 하는 상황을 자주 마주합니다. 예를 들어 일별 매출 리포트를 뽑는데, 매출이 0원인 날짜는 아예 조회되지 않아 그래프가 뚝뚝 끊기는 현상 같은 것들이죠. 이럴 때 필요한 것이 바로 1일부터 말일까지 꽉 채워진 '달력 테이블(Calendar Dummy Table)' 입니다. 오늘은 오라클(Oracle)의 강력한 계층형 쿼리 기능인 CONNECT BY LEVEL 을 사용하여, 단 3줄의 SQL로 특정 월의 모든 날짜를 생성하는 방법을 심층 분석해 보겠습니다. 1. 핵심 쿼리 분석 가장 먼저, 질문자님께서 공유해주신 코드를 기반으로 핵심 로직을 뜯어보겠습니다. 이 쿼리는 2018년 4월의 1일부터 30일까지를 생성하는 예제입니다. SELECT TO_CHAR(TO_DATE('201804'||LPAD(LEVEL,'2',0), 'YYYYMMDD'),'YYYYMMDD') AS YMD , LEVEL FROM (SELECT TO_DATE('20140601', 'YYYYMMDD') MAKE_DATES FROM DUAL) -- (A) CONNECT BY LEVEL <= TO_CHAR(LAST_DAY(sysdate),'DD') -- (B) 이 쿼리가 작동하는 원리는 다음과 같습니다. (A) DUAL 집합: CONNECT BY 를 수행하기 위한 모태가 되는 1건짜리 데이터입니다. (실제 날짜 값은 바깥에서 하드코딩 되어 있으므로 여기선 단순히 Row Source 역할만 합니다.) ...