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를 사용할 수 없으므로 서브쿼리로 대체해야 한다.
반응형