숫자 시퀀스
Coddy SQL 여정의 심화 과정 섹션에 포함된 레슨 — 27개 중 20번째.
Fundamentals 과정에서 서브쿼리에 이름을 붙이는 WITH 키워드를 접해보셨을 것입니다. 이는 CTE(Common Table Expression)라고도 합니다. recursive CTE는 여기서 한 걸음 더 나아가, 서브쿼리가 자기 자신을 참조하여 결과를 한 `row`씩 쌓아 올릴 수 있게 해줍니다.
가장 간단한 버전은 바탕이 되는 테이블 없이 숫자 시퀀스를 생성합니다. 형태는 항상 동일합니다:
WITH RECURSIVE counter(n) AS (
SELECT 1 -- 앵커: 시작 행
UNION ALL
SELECT n + 1 FROM counter WHERE n < 5 -- 재귀: 마지막에서 다음을 생성
)
SELECT n FROM counter다음과 같이 이해할 수 있습니다: n = 1로 시작하여 각 n이 이전 n + 1이 되는 행을 계속 추가하다가, WHERE 조건이 더 이상 일치하지 않으면 멈춥니다. 결과는 1, 2, 3, 4, 5입니다.
본문의 두 부분은 UNION ALL로 결합됩니다. 첫 번째는 anchor(시드 행)입니다. 두 번째는 recursive step으로, CTE 자체를 조회의 대상으로 합니다.
챌린지
쉬움두 개의 열을 가진 powers라는 이름의 recursive CTE를 작성하세요:
i:1부터starting하는 반복 인덱스p:2의i제곱 (2,4,8, …)
p가 1000을 초과하려고 하면 중단합니다. i 오름차순으로 정렬하여 두 열을 모두 반환하세요.
직접 해보기
WITH RECURSIVE powers(i, p) AS (
-- 앵커: i=1, p=2
-- 재귀: i+1, p*2, p가 1000에 도달할 때까지
)
SELECT i, p FROM powers ORDER BY i
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.