1주차 정규과제(2) - MySQL 공식문서: Common Table Expressions (CTE)
1주차 정규과제(2) - MySQL 공식문서: Common Table Expressions (CTE)
15.2.20 WITH (Common Table Expressions)
Common Table Expressions (공통 테이블 표현식, CTE)
원문 출처: MySQL 8.0 Reference Manual - 15.2.20 WITH (Common Table Expressions)
번역: DArt-B 학회
개요
공통 테이블 표현식(CTE, Common Table Expression)은 하나의 SQL 문(statement) 내에서만 존재하는 이름 있는 임시 결과 집합입니다.
해당 문장에서 여러 번 참조할 수 있으며, 특히 복잡한 쿼리를 구조적으로 나누고 가독성을 높이는 데 유용합니다.
CTE는 다음과 같은 주요 주제를 포함합니다:
- 일반 CTE (Common Table Expressions)
- 재귀 CTE (Recursive Common Table Expressions)
- 재귀 깊이 제한 (Limiting Recursion)
- 재귀 CTE 예제 (Examples)
- CTE와 유사한 구조 비교 (Comparison with Similar Constructs)
Common Table Expressions (기본 CTE)
구문
1
2
3
4
5
WITH
cte1 AS (SELECT a, b FROM table1),
cte2 AS (SELECT c, d FROM table2)
SELECT b, d FROM cte1 JOIN cte2
WHERE cte1.a = cte2.c;
- cte1, cte2는 각각의 하위 쿼리(subquery) 결과 집합을 이름으로 정의
- 이후 SELECT 문에서 마치 테이블처럼 참조 가능
- CTE 안에서 다른 CTE 참조 가능 (단, 뒤에 정의된 CTE는 참조 불가)
CTE 구문 규칙
- WITH 절은 SELECT, UPDATE, DELETE 문 앞에 위치할 수 있음
- INSERT, REPLACE, CREATE TABLE/VIEW, DECLARE CURSOR, EXPLAIN 문에서도 사용 가능
- 하나의 문장 레벨에는 WITH 절 하나만 허용
- 여러 CTE는 , 로 구분하여 나열해야 함
- CTE 이름은 반드시 유일해야 함
- 이름 해석 순서는 서브쿼리 > CTE > 기본 테이블/뷰 순서
컬럼 이름 결정 규칙
- CTE 정의 시 (col1, col2, …)처럼 이름을 지정하면 해당 컬럼명 사용
- 지정하지 않으면 첫 번째 SELECT 문의 select list 에서 컬럼명을 가져옴
WITH RECURSIVE 부분 제외
CTE vs Derived Tables (CTE와 파생 테이블 비교)
공통점: 이름이 있고, 단일 문장에서만 존재
차이점:
- 파생 테이블은 한 번만 참조 가능
- CTE는 여러 번 참조 가능
- CTE는 자기 참조(재귀) 가능
- 가독성 측면에서 CTE가 유리
CTE는 임시 테이블을 만들 필요 없이, 일시적이고 가벼운 구조로 사용 가능.
1
2
3
WITH cte AS (SELECT 1) SELECT * FROM cte;
-- 동일
SELECT * FROM (SELECT 1) AS dt;
This post is licensed under CC BY 4.0 by the author.