본문 바로가기
Programming/SQL

[MySQL] with CTE (공통 테이블 표현식)

by 코딩하는 금융인 2021. 11. 18.

안녕하세요. 오랜만에 SQL에 대하여 포스팅하게 되었습니다.

오늘은 SQL에서 반복적인 사용을 가능케 하는 CTE with문에 대해서 알아보겠습니다.

 

 CTE (Common Table Expressions)

▣ CTE란?

CTE(Common Table Expressions)는 단일 문의 범위 내에 존재하고 나중에 해당 문 내에서 여러 번 참조할 수 있는 명명된 임시 결과 집합

 

참조사이트 : https://dev.mysql.com/doc/refman/8.0/en/with.html#common-table-expressions-recursive

 

MySQL :: MySQL 8.0 Reference Manual :: 13.2.15 WITH (Common Table Expressions)

13.2.15 WITH (Common Table Expressions) A common table expression (CTE) is a named temporary result set that exists within the scope of a single statement and that can be referred to later within that statement, possibly multiple times. The following disc

dev.mysql.com

 

* 서브 쿼리에서 스스로를 참조하는 재귀적 CTE, 단순 쿼리에서 파생되며 SELECT 문 등 하나의 범위 내에서 정의 가능

 

※ 쉽게 말해서 계속해서 사용할 수 있는 가상의 테이블이라고 생각하면 됩니다.

반응형

 MySQL With문

▣ 가상 테이블 만들기

## 가상테이블 만들기 ##
WITH 가상테이블명 AS
(
    SELECT 쿼리
    UNION ALL -- 뭐 붙이거나 할 경우 추가
    SELECT 쿼리
)

- 2개 이상의 가상 테이블을 만들 경우에는 ,로 추가해주면 됩니다.

## 2개 이상의 가상 테이블 ##
WITH 
가상1 AS ( 서브쿼리문 ), 
가상2 AS ( 서브쿼리문 )

## 실제 사용 ##
SELECT 컬럼, [컬럼, ...] FROM 가상1, 가상2

 

물론 굳이 가상 테이블을 With문으로 만들 필요는 없습니다. From으로 테이블을 가져올 때 애초에 서브쿼리문을 활용하면 되기 때문입니다. 

Select [컬럼],....
FROM (서브쿼리문...)
WHERE 조건...

 

하지만, With문을 활용하였을 때 해당 SQL 환경에서 임시로 재사용이 가능하다는 장점을 가지고 있어 사용자 입장에서는 편리합니다. DDL문으로 SQL에 실제 테이블을 생성하는 것이 아니라 그렇게 효율적인 방법은 아니지만 임시로 사용할 때는 충분히 유용하기에 자신에게 잘 맞는 방법을 활용하시기 바랍니다.

반응형

댓글