Menu
Coddy logo textTech

숫자 시퀀스

Coddy SQL 여정의 심화 과정 섹션에 포함된 레슨 — 27개 중 20번째.

여러분은 서브쿼리에 이름을 붙이기 위해 기초(Fundamentals) 과정에서 WITH 키워드를 만났습니다. 이는 CTE(Common Table Expression)라고도 불립니다. 재귀적(recursive) CTE는 여기서 한 걸음 더 나아갑니다. 서브쿼리가 자기 자신을 참조할 수 있게 하여, 결과를 행 단위로 쌓아 올립니다.

가장 간단한 버전은 기본 테이블 없이 숫자 시퀀스를 생성합니다. 형태는 항상 동일합니다:

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)입니다: 시드 행(seed rows)을 의미합니다. 두 번째는 재귀 단계(recursive step)입니다: CTE 자체를 쿼리합니다.

challenge icon

챌린지

쉬움

두 개의 컬럼을 가진 powers라는 이름의 재귀적 CTE를 작성하세요:

  • i: 1에서 시작하는 반복 인덱스
  • p: 2i승 (2, 4, 8, …)

p1000을 초과하면 중단하세요. 두 컬럼을 모두 반환하고, i를 기준으로 오름차순 정렬하세요.

치트 시트

재귀적 CTE를 사용하면 서브쿼리가 자기 자신을 참조할 수 있어, 결과를 한 행씩 빌드할 수 있습니다:

WITH RECURSIVE counter(n) AS (
    SELECT 1                               -- anchor: 시작 행
    UNION ALL
    SELECT n + 1 FROM counter WHERE n < 5  -- recursive step: 재귀 단계
)
SELECT n FROM counter
  • 앵커(Anchor): 시드 행(들) (첫 번째 SELECT)
  • 재귀 단계(Recursive step): 다음 행을 생성하기 위해 CTE 자체를 쿼리합니다
  • WHERE 조건이 더 이상 일치하지 않을 때 중단됩니다
  • 두 부분은 UNION ALL로 결합됩니다

직접 해보기

WITH RECURSIVE powers(i, p) AS (
    -- 앵커: i=1, p=2
    -- 재귀: i+1, p*2, p가 1000에 도달할 때까지
)
SELECT i, p FROM powers ORDER BY i
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

심화 과정의 모든 레슨