서브쿼리에 별명을 붙여 재사용성을 갖춘 구문.
대부분의 DBMS에서 지원됨.
view
와 마찬가지로 임시테이블을 만드는 개념이지만 view
는 생성(create) 후 삭제(drop)하기 전까지는 모든 테이블에서 사용가능하나 with
절은 해당 쿼리내에서만 사용가능하다는 차이점이 있다.
사용
WITH [별명] AS (서브쿼리)
WITH [ 별명1 ] [ (컬럼명1 [,컬럼명2]) ] AS (
SUB QUERY
)[, 별명2 AS ... ]
MAIN QUERY
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문 내용추가