Database/Maria,Mysql

WITH RECURSIVE (재귀 쿼리)의 정리

bluebamus 2022. 9. 4.

재귀 쿼리 정리 :

1. 메모리 상 가상 테이블을 저장하는 것으로 하나의 쿼리가 동작 하는 동안만 존재한다.

2. 반드시 UNION을 사용 해야 한다.

 - UNION ALL (중복 허용)

3. 반드시 비반복문(Non-Recursive)도 최소 1개가 요구 된다. 앵커라 불리며 처음 한번만 실행한다.

4. SubQuery에서 바깥의 가상 테이블을 참조하는 문장(반복되는 쿼리)가 반드시 요구된다.

5. 반복되는 문장은 반드시 정지조건을 포함하고 있어야 한다.

6. 가상의 테이블을 구성하면서 그 자신(재귀 :가상의 테이블)을 참조하여 값을 결정할 때 유용하다.

 

*. 재귀 조건을 잘못 설정하면 n^으로 동작하기 때문에 불필요한 동작을 수행할 수 있음

 

WITH RECURSIVE test AS ( 
    -- Non-Recursive (앵커)
    SELECT 1 AS num
    UNION ALL
    -- Recursive 반복 (읽어 올 때마다 행의 위치가 기억되어 다음번 읽어 올 때 다음 행으로 이동함)
    SELECT num+1 AS num FROM test WHERE num<10
)
 
SELECT * FROM test;

 

 

참고 : 

https://inpa.tistory.com/entry/MYSQL-%F0%9F%93%9A-RECURSIVE-%EC%9E%AC%EA%B7%80-%EC%BF%BC%EB%A6%AC

 

[MYSQL] 📚 RECURSIVE (재귀 쿼리)

WITH RECURSIVE 문 (재귀 쿼리) 메모리 상에 가상의 테이블을 저장한다. 반드시 UNION 사용해야한다. 반드시 비반복문(Non-Recursive)도 최소한 1개 요구된다. 처음 한번만 실행 SubQuery에서 바깥의 가상의

inpa.tistory.com

https://dncjf0223.tistory.com/59

 

[MySQL] With Recursive 문, 세션 변수 활용, Pagination

1. 기본 테이블 형태 select * from employee; 2. Employee 테이블에서 직원 번호, 직원 이름과 직원의 상사 번호와 상사 이름을 출력 * With 절을 사용하지 않은 쿼리 select b.empno, b.ename, b.mgr, a.ename..

dncjf0223.tistory.com

https://codingdog.tistory.com/entry/%EA%B3%84%EC%B8%B5%ED%98%95-%EC%BF%BC%EB%A6%AC%EC%97%90-%EC%93%B0%EC%9D%BC-%EB%B2%95%ED%95%9C-with-recursive-%EC%A0%88%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B4%85%EC%8B%9C%EB%8B%A4

 

계층형 쿼리에 쓰일 법한 with recursive 절에 대해 알아봅시다.

프로그래머스나 해커랭크에서 sql 문제를 풀다 보면 with 문을 쓰면 더 간결해 지겠구나. 라는 생각이 들 때가 있어요. 이 with절이 그냥 단순하게 실행 결과를 임시로 저장해 두고 쓴다. 정도로만

codingdog.tistory.com

https://mariadb.com/kb/en/recursive-common-table-expressions-overview/

 

Recursive Common Table Expressions Overview

A recursive CTE will repeatedly execute subsets of the data until obtaining the complete results

mariadb.com

https://unrealengine.tistory.com/163

 

MySQL 계층구조 질의

WITH RECURSIVE, UNION을 사용하여 계층구조 질의를 작성하기 위한 기초 정리 원문참조 : https://dev.mysql.com/doc/refman/8.0/en/with.html MySQL의 WITH 절은 WITH절에 포함된 서브커리의 결과집합을 일단 이..

unrealengine.tistory.com

https://jjon.tistory.com/entry/Recursive-CTECommon-Table-Expression-%ED%99%9C%EC%9A%A9

 

Recursive CTE(Common Table Expression) 활용

이전에 작성한 내용(MySQL 8.0 신기능 CTE 활용) 중에 재귀 쿼리에 대한 내용을 언급했었습니다. SQL은 일반적으로 재귀 쿼리 구조에 좋지 않지만 이제 MySQL에서 재귀 쿼리를 작성할 수 있습니다. MySQ

jjon.tistory.com

https://velog.io/@sangmin7648/MySQL-WITH-RECURSIVE

 

MySQL WITH RECURSIVE

CTE와 재귀적 CTE

velog.io

 

댓글