WITH RECURSIVE (재귀 쿼리)의 정리
재귀 쿼리 정리 :
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
https://dncjf0223.tistory.com/59
https://mariadb.com/kb/en/recursive-common-table-expressions-overview/
https://unrealengine.tistory.com/163
https://jjon.tistory.com/entry/Recursive-CTECommon-Table-Expression-%ED%99%9C%EC%9A%A9
https://velog.io/@sangmin7648/MySQL-WITH-RECURSIVE
'Database > Maria,Mysql' 카테고리의 다른 글
percona mysql을 docker로 설치하는 방법 (0) | 2023.06.18 |
---|---|
join에서 where과 on의 차이, outer join에 대한 정리 (0) | 2022.08.30 |
WITH와 CTE를 이용한 재귀적 사용법 (재귀 쿼리) (0) | 2022.08.29 |
with와 CTE (common table expression) (0) | 2022.08.29 |
1. replication with mariaDB - MariaDB와 MySQL의 Replication은 다르다! (0) | 2022.01.25 |
댓글