더북(TheBook)

재귀 쿼리이므로 WITH 다음에 RECURSIVE를 명시하고 cte란 서브쿼리를 정의합니다. 그리고 메인쿼리인 마지막 SELECT 문에서는 cte 서브쿼리를 조회합니다. 이 쿼리에서 중요한 부분은 cte 서브쿼리를 정의한, 소괄호 안에 있는 내용인데 한 부분씩 자세히 살펴보죠.

SELECT 1 AS n

초기 쿼리 또는 시작 쿼리로, 순환 구조에서 초기 로우를 정의하는 부분입니다. 이 쿼리만 단독으로 실행하면 칼럼 값이 1인 n이라는 1개의 로우가 조회되고, 여기서부터 순환 참조가 시작됩니다.

SELECT n + 1 FROM cte WHERE n < 5

FROM 절에 명시한 cte(자기 자신)를 참조하면서 반복적으로 추가 로우를 만드는 부분입니다. n 값에 1을 더해(n + 1) 새로운 로우를 생성하는데, WHERE 절의 조건에 따라 n이 5보다 작을 때까지 계속해서 n에 1을 더하며 로우를 생성합니다.

첫 번째 SELECT 문이 시작 지점이므로 여기서 n 칼럼 값으로 1이 반환되고, 두 번째 SELECT 문에서는 n에 1을 더해 2를 반환합니다. n이 5보다 작다는 조건이 있으므로 계속해서 n에 1을 더해 반환하다가 n이 4일 때까지 수행하고 종료합니다. 첫 번째 SELECT 문은 1, 두 번째 SELECT 문은 2, 3, 4, 5(n이 4일 때가 마지막이므로 4 + 1 = 5) 값의 로우를 만듭니다. 그리고 이 두 문장을 UNION ALL로 연결했으므로 최종 결과 집합에는 1, 2, 3, 4, 5를 반환하는 5개 로우가 조회됩니다.

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