본문 바로가기

DataBase/Mysql

[ mysql ] with recursive 문법 (+ 프로그래머스 특정 세대의 대장균 찾기)

반응형

with recursive 는 재귀 쿼리 문법이다. 아래의 예시를 통해서 자세히 알아보자.

(아래 링크의 프로그래머스의 문제를 예시로 든 것이기 때문에, 자세한 문제는 아래를 참고하길 바람)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

| 테이블

ecoli_data 테이블

 

 

ecoli_data 테이블이 존재하고 부모-자식 관계를 나타내는 데이터가 저장되어 있다.

ID 1,2 는 1세대

ID 3,4,5 는 2세대

ID 6,7 은 3세대

ID 8 은 4세대

그럼 ID 를 기준으로 세대를 구하는 쿼리는 어떻게 짤 것인가?

with recursive 문법을 쓰면 쿼리는 다음과 같다.

 

 

| 쿼리 구조

with recursive 문법

1. 메모리 상에 가상의 테이블을 저장한다.
2. 최초에 기준이 되는 쿼리가 필요하다.
3. 반복하려는 쿼리를 UNION 으로 붙인다.
4. 반복쿼리가 종료되는 조건을 붙인다.
5. 반복되어 생성된 가상의 테이블을 사용한다.

 

 

| 동작 원리 (단계별)

 

그럼 어떻게 동작하는지 과정을 알아보자.

 

반응형

 

 

최초 단계

 

가장 기준이 되는 쿼리가 먼저 실행되고

gen_data 테이블에는 다음과 같은 데이터가 들어간다.

 

 

1단계

 

다음으로 반복구간 쿼리가 동작한다.

join 조건에 해당되는 데이터가 gen_data 테이블에 추가로 들어간다.

 

 

2단계

 

반복구간이 다시 동작하고 데이터가 들어간다.

 

 

3단계

반복구간이 다시 동작하고 데이터가 들어간다.

join 조건에 해당되는 게 더 이상 없기 때문에 반복문은 종료된다.

 

 

 

현업에서 개발하면서 with recursive 문법을 사용한 적이 없을 정도로 잘 쓰이는 문법은 아닌 듯 하다.

하지만 개념정도는 알아가면 좋을 것 같다..

반응형