-
<SQL : MySQL> RECURSIVE(재귀 쿼리)데이터 분석 관련 공부 2024. 1. 9. 14:04
SQL을 하다보면 연속적인 숫자 데이터를 생성할 필요가 있을 수 있다. 이 때 프로그래밍이라면
반복문을 돌려서 쉽게 해결할 수 있는데 SQL에는 해당하는 기능이 없을까 SQL에서는 재귀 쿼리를 이용하여
해당 문제를 해결한다.
재귀 쿼리는 프로그래밍 언어에서 재귀함수와 유사하게 동작한다.
MySQL에는 WITH문 뒤에 RECURSIVE문을 붙여 재귀적으로 CTE를 하는 것을 통해 이를 구현한다.
WITH RECURSIVE는 세 가지 부분으로 구성된다.
- 재귀 CTE의 기본 결과 집합을 형성하는 초기 쿼리를 앵커멤버 (Anchor member) 라고 부른다.
- UNION ALL 아래에 재귀 쿼리 부분은 CTE의 이름을 참조하는 쿼리로 재귀멤버 (Recursive member) 라고 부른다.
- 마지막으로 재귀 멤버가 행을 반환하지 않을 때 재귀가 중지되도록 하는 종료 조건(Termination condition)이 있다.
위 예시 사진의 재귀 쿼리를 실행하면 초기 쿼리인 1부터 시작하여 2, 3까지 재귀적으로 SELECT하고
재귀적으로 실행되는 쿼리들을 UNION ALL을 통해 합치게 되며 WHERE 조건에서 n이 3일 때 종료되어 위 결과가 나온다.
예시로 한 번 거꾸로 실행하는 쿼리를 만들어보았다.
WITH RECURSIVE RC(n) AS ( SELECT 5 # 초기 쿼리 UNION ALL SELECT n-1 FROM RC # 재귀 쿼리 WHERE n > 1 # 종료 조건 ) SELECT * FROM RC
5에서 초기 쿼리를 시작하여 -1씩 재귀 반복하여 합치는 것을 통해 1씩 작아지게 하였고 n이 1과 같아졌을 때 종료되도록하였으므로 5,4,3,2,1이 순차적으로 출력된다.
- References
- https://www.mysqltutorial.org/mysql-basics/mysql-recursive-cte/ <MySQL tutorial>
'데이터 분석 관련 공부' 카테고리의 다른 글
<통계학> 통계적 가설 검정 -1 (귀무가설, 대립가설, p-value) (1) 2024.01.22 <통계학> 큰 수의 법칙, 중심극한정리 (1) 2024.01.22 <Python, SQL> pymysql 라이브러리(with Pandas DataFrame) (0) 2024.01.12 데이터 리터러시(Data Literacy) -2 (0) 2024.01.03 데이터 리터러시(Data Literacy) -1 (1) 2024.01.03