본문 바로가기
데이터베이스/SQL

[MySQL] WITH 절

by 샐리_ 2025. 1. 15.

MySQL의  WITH  절과 CTE(Common Table Expressions, 공통 테이블 표현식)은 쿼리를 간결하고 가독성 있게 작성할 수 있도록 도와주는 기능이다. 특히 복잡한 쿼리 구조를 간소화하거나, 재귀적인 데이터 처리가 필요한 경우 유용하게 사용할 수 있다.

 

WITH 절과 CTE의 개념

- WITH 절은 CTE를 정의하기 위해 사용된다.

- CTE는 임시로 생성되는 테이블과 같은 역할을 하며, 쿼리 실행 시 메모리에서만 존재하고 실행이 완료되면 사라진다.

- 복잡한 서브 쿼리를 반복적으로 작성하지 않아도 되며, 가독성을 높이고 유지보수를 용이하게 한다.

 

기본 사용법

WITH cte_name AS 
(
    SELECT cloumn1, cloumn2
    FROM table_name
    WHERE condition 
)
SELECT *
FROM cte_name;

-  WITH cte_name AS (...)  :  cte_name 은 CTE의 이름이며, 내부에 작성된 쿼리 결과를 저장한다.

-  SELECT * FROM cte_name  :  cte_name 을 마치 일반 테이블처럼 사용할 수 있다.

 

CTE와 서브쿼리 비교

특징 CTE 서브쿼리
가독성 가독성이 뛰어남 복잡한 경우 읽기 어려움
재사용성 CTE를 여러번 재사용 가능 동일한 서브쿼리를 반복 작성 필요
성능 최적화가 더 잘 이루어질 수있음 상황에 따라 성능이 저하될 수 있음
재귀 쿼리 지원 지원 직접적으로 지원하지 않음

 

주의사항

- CTE는 메모리에서 처리되므로, 데이터 양이 매우 많거나 복잡한 쿼리에서는 성능 문제가 발생할 수 있다.

- MySQL 8.0 이상에서만 사용 가능하다. 그 이전 버전에서는 WITH 절과 CTE를 사용할 수 없으므로 서브쿼리로 대체해야 한다.

반응형

'데이터베이스 > SQL' 카테고리의 다른 글

JOIN  (1) 2023.09.13