WITH RECURSIVE
메모리상에 가상테이블을 생성하여 쿼리문을 수행할 수 있다.
생성한 가상테이블에서 필요한 데이터를 추출할 수 있다.
실제로 테이블을 생성하거나 INSERT 문을 통해 데이터를 삽입하지 않아도 된다.
WITH RECULSIVE 테이블명 AS(
SELECT 컬럼 FROM 테이블명 WHERE 조건 (비반복문)
UNION ALL
SELECT 컬럼 FROM 테이블명 WHERE 조건 (반복문)
)
SELECT 컬럼 FROM 테이블명
1. SELECT 컬럼 FROM 테이블명 WHERE 조건 (비반복문)
WITH RECURSIVE 안의 첫번째 SELECT 문은 비반복문이다.
보통 초기값을 세팅할때 사용하며 RECURSIVE 문을 사용할때는 필수적으로 적어야한다.
2. UNION ALL
비반복문인 첫번째 SELECT문의 초기값에 아래의 반복문을 실행할 SELECT문을 붙이기 위한 UNION 사용
RECURSIVE 문을 사용할때는 필수로 적어야한다.
3. SELECT 컬럼 FROM 테이블명 WHERE 조건 (반복문)
반복문을 사용하기 위한 SELECT 문, 반복문을 종료시키기 위한 WHERE 조건이 필수적이다.
WHERE 조건을 통해 정지시키지 않으면 무한루프로 쿼리를 날린다.
4. SELECT 컬럼 FROM 테이블명
WITH RECURSIVE를 통해 생성된 가상테이블에서 필요한 데이터를 뽑아낼 SELECT문이다.
예시)
WITH RECURSIVE CTE as(
select 0 as num
union all
select num+1 as num from CTE
where num < 10
)
select num from CTE;
WITH RECURSIVE CTE as()
가상테이블을 생성하기 위해 WITH RECURSIVE문 사용
가상테이블의 이름을 "CTE" 로 설정
select 0 as num
비반복문으로 가상테이블의 첫번째 초기값을 설정한다.RECURSIVE 문을 사용할때는 필수적으로 적어야한다.num 이름으로 0이라는 초기값을 설정했다.
union all
비반복문의 위쪽 SELECT 문과 아래의 반복문 SELECT 문을 연결하기 위한 UNION 구문이다.
select num+1 as num from CTE where num < 10
초기값의 num + 1 부터 반복문을 시작한다.
반복문의 SELECT 문은 반복문을 종료시키기 위한 WHERE 절이 필수이다.
10이하일때 까지 반복한다.