zimslog

[SQL] 재귀적 CTE - WITH RECURSIVE AS 본문

Data Engineering/SQL

[SQL] 재귀적 CTE - WITH RECURSIVE AS

zimslog 2025. 8. 20. 13:08
재귀적 CTE - WITH RECURSIVE AS

 

 

 

 

WITH CTE는 정적 테이블을 만들고,

WITH RECURSIVE CTE는 동적 테이블을 만든다. (자기 자신을 호출하면서 데이터 만듬)

 

기본 구문)

WITH RECURSIVE cte AS (
	SELECT 1 AS n -- 가장 첫번째 행 정의, 한번만 실행
    UNION ALL
	SELECT n+1 FROM cte -- 두번째부터 마지막 행까지 정의
    WHERE n < 5 -- 조건 만족할 때까지만 호출
)
SELECT * FROM cte;

 

SELECT 문에서 컬럼명 명시하지 않고, 테이블명(컬럼명)으로 지정해주어도 됨. 위 쿼리와 같은 결과

WITH RECURSIVE cte(n) AS (
	SELECT 1
    UNION ALL
    SELECT n+1 FROM cte
    WHERE n<5
)

 

 

피보나치 수열) 

첫째, 둘째 항은 1이고 셋째 항부터는 앞의 두 항의 합으로 계산

1 1 2 3 5 8 13 21 ...

WITH RECURSIVE fibonacci (col1, col2) AS (
	SELECT 1, 1
    UNION ALL
    SELECT col2, col1+col2 FROM fibonacci
	WHERE col2 < 50
)
SELECT col1 as 'Fibonacci Numbers'
FROM fibonacci

 

 

24시간 0 ~ 23 만들기)

WITH RECURSIVE time24hours AS (
	SELECT 0 as hr
    UNION ALL
    SELECT hr+1 FROM time24hours
    WHERE hr < 23
)
SELECT hr FROM time24hours;