BQ-02. 테이블 없이 순번 레코드 만들기

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
복사
답안