SQL에서 재귀 쿼리 짤 때 사용하는 구문이다.
구문 작성하는 방법이 좀 독특한데, 아래와 같다.
WITH RECURSIVE cte_count
AS (
-- Non-Recursive 문장( 첫번째 루프에서만 실행됨 )
SELECT 1 AS n
UNION ALL
-- Recursive 문장(읽어 올 때마다 행의 위치가 기억되어 다음번 읽어 올 때 다음 행으로 이동함)
SELECT n + 1
FROM cte_count
WHERE n < 3
)
SELECT * FROM cte_count;
1. 메모리 상에 가상의 테이블을 저장한다.
2. 반드시 UNION 사용해야한다.
3. 최소한 하나의 비반복문(Non-Recursive)이 있어야 한다. 처음 한번만 실행된다.
4. 서브쿼리에서 바깥의 가상의 테이블을 참조하는 문장(반복문)이 반드시 필요하다.
5. 반복되는 쿼리는 반드시 정지조건(Termination condition)이 있어야 한다.
6. 가상의 테이블을 구성하면서 그 자신(가상의 테이블)을 참조하여 값을 결정할 때 유용하다.
간단하게 예시를 들어 보면 다음과 같다.
프로그래머스의 입양 시각 구하기(2) 문제를 풀다가 알게 된 구문이다.
실제 문제 풀이에는 아래의 문제풀이 포스팅과 같이 적용될 수 있을 것이다.
[코딩테스트/SQL - 프로그래머스] - SQL 고득점 kit(GROUP BY) - 입양 시각 구하기(2)
재귀문을 사용해서 뭔가를 출력해야 할 일이 있을 때에 유용하게 써 보도록 하자!
'STUDY > SQL, DB' 카테고리의 다른 글
[MySQL] temporary table (0) | 2024.03.05 |
---|---|
[MySQL] 비트(bit) 연산자 (2) | 2024.02.29 |
[SQL] 데이터 타입 훑어보기 (0) | 2024.02.15 |
[DBeaver] Data import하기 (0) | 2024.02.15 |
[DBeaver] DB에 "처음"연결하기 (0) | 2024.02.15 |