DBMS 별로, 테이블 없이 순번 레코드를 생성하는 SQL을 알아보자. SQL을 활용해 순번을 만드는 기술은, 데이터 분석을 위해 아주 유용하게 사용할 수 있는 기술이다.
ORACLE은 CONNECT BY나 XMLTABLE을 활용해 어렵지 않게 순번 레코드를 구현할 수 있다.
-- ORACLE
SELECT ROWNUM as RNO
FROM DUAL
CONNECT BY ROWNUM <= 10;
SELECT ROWNUM as RNO
FROM XMLTABLE ('1 to 10');
-- 결과
RNO
----
1
2
3
4
5
6
7
8
9
10
SQL
복사
PostgreSQL 역시 어렵지 않다. generate_series라는 유용한 함수를 제공해준다.
-- PostgreSQL
SELECT generate_series(1,10);
SQL
복사
MySQL은 좀 골치가 아프다. 재귀 순환 방식의 WITH 절을 사용해야 한다. WITH 절 안에서 자기 자신을 재참조해 원하는 순번 데이터를 만들어 낼 수 있다.
-- MySQL
WITH RECURSIVE WRNO AS (
SELECT 1 as RNO
UNION ALL
SELECT RNO + 1
FROM WRNO
WHERE RNO + 1 <= 10
)
SELECT *
FROM WRNO;
SQL
복사
지금까지 살펴본 순번 생성 SQL을 응용해 문제를 풀어보자. 25년 1월 1일부터 25년 1월 31일까지의 날짜 레코드를 만들어보는 것이다. 다음과 같은 결과를 만들면 된다.
DT
-----------
2025-01-01
2025-01-02
2025-01-03
2025-01-04
2025-01-05
... 생략 ...
2025-01-27
2025-01-28
2025-01-29
2025-01-30
2025-01-31
SQL
복사
답안