더북(TheBook)

11.1.3 CTE로 재귀 쿼리 만들기

CTE의 또 다른 특징은 재귀 쿼리를 만들 수 있다는 점입니다. 재귀(recursive) 쿼리란 서브쿼리 안에서 다시 자신을 참조하는 순환 참조 기능으로, 최종 결과 집합을 반환할 때까지 하위 집합을 반복적으로 반환하는 쿼리를 말합니다. 말로 설명하면 어려우니 일단 기본 구문부터 살펴보죠.

구문 11-2

WITH RECURSIVE cte1 AS
(SELECT ... FROM ...
  UNION ALL
 SELECT ... FROM cte1 ...
),
...
SELECT ...
  FROM cte1, cte2, ...

이전 CTE 구문과 다르게 WITH 다음에 RECURSIVE를 명시합니다. 그리고 cte1 서브쿼리 안에서 두 개의 SELECT 문을 UNION으로 연결합니다. 여기서 첫 번째 SELECT 문은 초기 쿼리, 두 번째 SELECT 문은 재귀 쿼리를 담당하며, 두 번째 SELECT 문의 FROM 절에서 자기 자신인 cte1을 참조할 수 있습니다.

재귀 CTE는 주로 연속적인 로우를 만들 때와 계층형 쿼리를 작성할 때 사용하는데, 하나씩 살펴보죠.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.