본문 바로가기
Programming/SQL

[MySQL] with recursive 재귀쿼리 (개념/예제)

by 코딩하는 금융인 2022. 2. 14.

안녕하세요.

오늘은 파이썬의 for문과 비슷한 원리로 돌아가는 반복문이자 재귀쿼리 with recursive에 대해 알아보겠습니다.

 

 with recursive 구조 및 원리

▣ MySQL 기본 구조 (MySQL 5.7 이하 미지원)

WITH RECURSIVE 테이블 or 뷰 AS (
    초기 SQL문 --SELECT문
    UNION ALL
    반복할 SQL문 --SELECT문+WHERE 조건문
 )

SELECT문 FROM 테이블 OR 뷰;

 

▣ 원리 설명

  1. 초기 SQL문(called by anchor member)을 실행하면 RECURSIVE문을 선언할 때 기재한 테이블이나 뷰에 담긴다.
  2. 반복할 SQL문(called by recursive member)의 FROM절에 앞선 테이블이나 뷰명을 이용해서 처리하거나 한다.
  3. UNION 혹은 UNION ALL 연산을 한다. (경우에 따라 다르며 UNION DISTINCT도 사용 가능)
  4. 반복할 SQL문에서 단 하나의 레코드가 나오지 않을 때, 즉 recursive member가 row를 반환하지 않을 때 반복문을 탈출한다.
  5. recursive문을 탈출하였으면 뷰명에 연산된 결과셋이 다시 담기게되고 뷰처럼 조회할 수 있다.
반응형

 with recursive 예제

▣ 프로그래머스 입양 시각 구하기(2)

 

▣ 예제 풀이 in MySQL

## WITH RECURSIVE PROGRAMMERS ##
WITH RECURSIVE TEMP AS (
	SELECT 0 AS HOUR
    UNION ALL
    SELECT HOUR + 1
    FROM TEMP
    WHERE HOUR < 23)
    
SELECT TEMP.HOUR AS HOUR, COUNT(ANIMAL_OUTS.DATETIME) AS COUNT
FROM TEMP LEFT JOIN ANIMAL_OUTS
ON TEMP.HOUR = HOUR(ANIMAL_OUTS.DATETIME)
GROUP BY HOUR;

 

해당 문제는 다른 방식으로 풀었던 적이 있어 과거 포스팅했던 글을 아래에 올립니다.

2020.08.24 - [코딩테스트/프로그래머스] - [프로그래머스] SQL GROUP BY 입양 시각 구하기(2)

 

[프로그래머스] SQL GROUP BY 입양 시각 구하기(2)

문제. SQL > GROUP BY > 입양 시각 구하기(2) 문제 설명 ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, A..

codingspooning.tistory.com

 

 

반응형

댓글