[SQL] WITH, RECURSIVE WITH

하파타카·2022년 6월 13일
0

SQL

목록 보기
14/26

WITH

서브쿼리에 별명을 붙여 재사용성을 갖춘 구문.
대부분의 DBMS에서 지원됨.

view와 마찬가지로 임시테이블을 만드는 개념이지만 view는 생성(create) 후 삭제(drop)하기 전까지는 모든 테이블에서 사용가능하나 with절은 해당 쿼리내에서만 사용가능하다는 차이점이 있다.

사용
WITH [별명] AS (서브쿼리)

WITH [ 별명1 ] [ (컬럼명1 [,컬럼명2]) ] AS (
    SUB QUERY
)[, 별명2 AS ... ]
MAIN QUERY
  • 컬럼명 생략가능
  • 쉼표로 구분하여 여러개 정의 가능

RECURSIVE WITH

WITH절이 자신이 자신을 호출하는 방식으로, 이를 재귀 라고 부름.

메모리상에 가상의 테이블을 저장함.
재귀쿼리를 이용하면 테이블을 실제로 생성하거나 데이터를 삽입(insert)하지 않아도 가상의 테이블을 생성할 수 있다.

사용

WITH RECURSIVE 테이블명 AS(
	SELECT 초기값 AS 컬럼별명1
    UNION ALL
    SELECT 컬럼별명1 계산식 FROM 테이블명 WHERE 제어문
)

* MySQL의 경우 5.7이하는 미지원

* RECURSIVE에 대한 개념이해가 잘 안되어 아래 참고링크의 원문에서 거의 그대로 가져옴.
원본을 참고하여 공부해두자.

아래는 간단한 예시.

/* WITH 공통테이블 표현식 + RECURSIVE 키워드 */
WITH RECURSIVE t AS (
   SELECT 1 AS num   /* 앵커 */
   UNION all
   SELECT num + 1 FROM t   /* 반복 */
   WHERE num < 10
)
SELECT num FROM t;


간단하게 이해하자면 for문과 유사한 형식이라고 생각하면 됨.


참고 링크

WITH절 사용하기
[SQL] WITH문
[SQL] WITH 절이란?

[SQL][SQLD][SQLP] WITH절 (일반, Recursive, 계층)
SQL문법 | 데이터 조회 및 필터 | 재귀쿼리 RECURSIVE QUERY


수정이력

220630수정_RECURSIVE WITH문 내용추가

profile
천 리 길도 가나다라부터

0개의 댓글