WITH 절은 CTE를 표현하기 위한 구문


CTE : Common Table Expression (공통 테이블 식)


CTE는 기존 뷰, 파생 테이블, 임시 테이블 등을 대신할 수 있으며 더 간결한 표현이 가능


CTE는 비재귀적, 재귀적 2가지가 있음






비재귀적 CTE

단순한 형태이며 쿼리분을 단순화 시키는 데에 적합


WITH CTE 테이블 이름 (열 이름)

AS

(

쿼리문

)

SELECT 열 이름 FROM CTE 테이블 이름;


WITH 절로 조회한 결과로 가상의 테이블을 만들어 select를 실행한다.


WITH 

AAA (열 이름)

AS (쿼리문),

BBB (열 이름)

AS (쿼리문), 

CCC (열 이름)

AS (쿼리문)

SELECT 열 이름 FROM CTE 테이블 이름;


위 형식처럼 중복 CTE도 가능하지만 BBB, CCC는 AAA의 참조가 가능하고 AAA는 아직 정의되지 않은 BBB, CCC를 참조할 수 없음




재귀적 CTE

재귀적 : 자신을 반복적으로 호출


WITH CTE 테이블 이름 (열 이름)

AS

(

<쿼리문1 : SELECT * FROM 테이블1>

UNION ALL

<쿼리문2 : SELECT * FROM 테이블1 JOIN CTE 테이블 이름>

)

SELECT 열 이름 FROM CTE 테이블 이름;


먼저 쿼리문1이 작동하고 다음에 쿼리문2가 작동하며 쿼리문2의 결과가 없을때까지 계속 재귀적으로 호출

+ Recent posts