Data_10기

SQL Recursive

senu 2025. 12. 17. 20:54

1. CTE (Common Table Expression)

CTE는 쿼리 안에서 사용하는 임시 결과 집합으로, WITH 절을 사용한다. CTE는 쿼리 실행 동안만 존재하며 서브쿼리와 비교해서 가독성이 좋고, 복잡한 쿼리를 단계적으로 분리할 수 있다는 장점이 있다.
# 기본문법
WIHT 테이블명 AS (
	SELECT ...
)
SELECT *
FROM 테이블명
;

 

2. 재귀 (Recursive)

재귀는 자기 자신을 다시 참조하며 반복적으로 실행되는 구조를 의미한다.


SQL에서 재귀는 이전 결과를 다시 사용해 다음 결과를 만들어내는 방식으로 동작한다. 이 개념을 CTE에 적용한 것이 재귀 CTE이다.

Python에서 for문과 비슷한 역할을 한다고 볼 수 있다.

 

3. 코드카타 : 프로그래머스 입양 시각 구하기(2)

WITH RECURSIVE hours AS (
    SELECT 0 AS hour
    UNION ALL
    SELECT hour + 1 FROM hours WHERE hour < 23
)
select h.hour, count(o.animal_id) as 'count'
from hours as h
left join animal_outs as o
on h.hour = hour(o.datetime)
group by h.hour
order by h.hour
;