공통 테이블 식(CTE)
공통 테이블 식(Common Table Expression, CTE)
은 WITH
절로 정의하는 임시 결과 집합입니다.
CTE를 사용하면 SQL을 더 읽기 쉽고, 구조화하기 쉽고, 재사용하기 쉬워집니다.
이번 레슨에서는 비재귀 CTE를 살펴봅니다.
즉, CTE가 자기 자신을 호출하지 않고, 간단한 로직이나 필터링을 위해 한 번만 사용하는 경우를 말합니다.
문법
CTE의 기본 문법은 다음과 같습니다.
CTE 문법
WITH cte_name AS ( SELECT ... FROM ... WHERE ... ) SELECT * FROM cte_name;
WITH
은 CTE 블록을 정의합니다- 메인 쿼리는 이를 일반 테이블처럼 참조합니다
예시: 2개 이상의 강의를 선택한 사용자
다음 쿼리는 2개 이상 강의를 선택한 사용자를 반환합니다.
CTE 예제
WITH multi_course_users AS ( SELECT user_id, COUNT(*) AS course_count FROM user_courses GROUP BY user_id HAVING COUNT(*) >= 2 ) SELECT u.name, m.course_count FROM multi_course_users m JOIN users u ON u.user_id = m.user_id ORDER BY u.name;
출력:
name | course_count |
---|---|
Aisha | 2 |
Sofia | 2 |
이 쿼리는 다음을 수행합니다.
- CTE(
multi_course_users
)를 만들어 최소 2개 이상의 강의를 선택한 사용자를 찾습니다. - 이를
users
테이블과 Join해 이름과 수강 수를 출력합니다.
CTE 사용의 이점
- 가독성: 큰 쿼리를 관리 가능한 부분으로 나눕니다
- 모듈성: 일부를 테스트하고 재사용하기가 쉽습니다
- 유지보수성: 로직이 분리되어 있어 변경이 수월합니다
여러 개의 CTE
쉼표로 구분해 여러 개의 CTE를 정의할 수 있습니다.
여러 개의 CTE
WITH active_users AS ( SELECT DISTINCT user_id FROM user_courses ), recent_users AS ( SELECT * FROM users WHERE name LIKE 'S%' ) SELECT * FROM active_users a JOIN recent_users r ON a.user_id = r.user_id;
이 쿼리는 user_id
컬럼을 기준으로 두 CTE를 Join합니다.
Quiz
0 / 1
SQL에서 공통 테이블 식(CTE)을 사용하는 주된 목적은 무엇인가요?
데이터베이스에 데이터를 영구적으로 저장하기 위해서.
여러 쿼리를 동시에 실행하기 위해서.
복잡한 쿼리를 더 작은 부분으로 나누어 간소화하기 위해서.
SQL 쿼리 실행 속도를 높이기 위해서.
학습 자료
AI 튜터
디자인
업로드
수업 노트
즐겨찾기
도움말
코드 에디터
코드 실행
코드 생성
DB 테이블 구조
실행 결과