SQL Common Table Expressions (CTE) 이해
Takashi Yamamoto
Infrastructure Engineer · Leapcell

Key Takeaways
- CTE는 SQL 쿼리의 가독성과 구조를 개선합니다.
- CTE는 계층적 데이터를 위한 재귀적 쿼리를 지원합니다.
- CTE를 과도하게 사용하면 대용량 데이터 세트에서 성능에 영향을 미칠 수 있습니다.
SQL(구조적 쿼리 언어)은 관계형 데이터베이스를 관리하고 조작하는 데 필수적인 도구입니다. 다양한 강력한 기능 중에서 **CTE(Common Table Expression)**는 복잡한 쿼리를 단순화하고 코드 가독성을 향상시키며 고급 데이터 처리 기술을 지원하는 기능으로 두드러집니다. 이 기사에서는 CTE가 무엇인지, 어떻게 작동하는지, 그리고 이를 사용하는 모범 사례를 살펴봅니다.
CTE(Common Table Expression)란 무엇입니까?
CTE(Common Table Expression)는 SELECT
, INSERT
, UPDATE
또는 DELETE
문 내에서 참조할 수 있는 임시 결과 집합입니다. 파생 테이블이나 하위 쿼리와 달리 CTE는 복잡한 쿼리를 구성하는 데 더 읽기 쉽고 모듈화된 방법을 제공합니다.
CTE는 SQL Server 2005에서 처음 도입되었으며 현재 PostgreSQL, MySQL(8.0+), Oracle 및 SQLite를 포함한 대부분의 주요 관계형 데이터베이스 관리 시스템에서 지원됩니다.
CTE의 구문
CTE의 기본 구문은 다음과 같습니다.
WITH cte_name AS ( SELECT column1, column2 FROM table_name WHERE condition ) SELECT * FROM cte_name;
CTE는 WITH
키워드로 시작하고 그 뒤에 CTE의 이름과 괄호 안에 정의하는 쿼리가 옵니다. 그런 다음 CTE는 기본 쿼리에서 일반 테이블 또는 뷰처럼 참조할 수 있습니다.
CTE 사용의 이점
1. 가독성 향상
CTE는 복잡한 쿼리를 더 간단하고 논리적인 빌딩 블록으로 분해하는 데 도움이 됩니다. 이 모듈식 접근 방식을 통해 SQL 코드를 더 쉽게 이해하고 디버깅하고 유지 관리할 수 있습니다.
2. 재귀적 쿼리
CTE의 가장 큰 장점 중 하나는 계층적 데이터(예: 조직 차트 또는 트리 구조)를 탐색하는 것과 같은 재귀적 쿼리를 처리할 수 있다는 것입니다. 재귀적 CTE는 조건이 충족될 때까지 쿼리를 반복적으로 실행합니다.
3. 재사용성
단일 CTE를 기본 쿼리 내에서 여러 번 참조할 수 있으므로 복잡한 하위 쿼리를 반복할 필요가 없습니다.
예: 간단한 CTE
회사 평균보다 높은 급여를 받는 직원을 검색하려는 경우:
WITH avg_salary AS ( SELECT AVG(salary) AS company_avg FROM employees ) SELECT name, salary FROM employees, avg_salary WHERE employees.salary > avg_salary.company_avg;
여기서 avg_salary
CTE는 평균 급여를 한 번 계산하여 기본 쿼리를 간단하고 효율적으로 만듭니다.
예: 재귀적 CTE
재귀적 CTE는 조직 계층 구조에서 주어진 관리자의 모든 부하 직원을 검색하는 데 도움이 될 수 있습니다.
WITH RECURSIVE subordinates AS ( SELECT id, name, manager_id FROM employees WHERE manager_id IS NULL UNION ALL SELECT e.id, e.name, e.manager_id FROM employees e INNER JOIN subordinates s ON e.manager_id = s.id ) SELECT * FROM subordinates;
이 쿼리는 최고 수준의 관리자부터 시작하여 모든 직속 및 간접 보고서를 재귀적으로 찾습니다.
제한 사항 및 모범 사례
- 성능: CTE는 쿼리의 가독성을 높일 수 있지만 특히 매우 큰 데이터 세트의 경우 항상 가장 효율적인 것은 아닐 수 있습니다. 일부 데이터베이스에서 CTE는 구체화되지 않으므로 CTE 내부의 쿼리는 참조될 때마다 실행됩니다.
- 여러 CTE: 쉼표로 구분하여 여러 CTE를 정의할 수 있습니다.
- 이름 지정: 쿼리를 자체 설명적으로 만들기 위해 CTE에 의미 있는 이름을 사용합니다.
결론
CTE(Common Table Expression)는 쿼리의 명확성과 기능을 모두 향상시키는 SQL의 강력한 기능입니다. 모듈식이고 읽기 쉬운 방식으로 복잡한 로직을 구성하는 방법을 제공함으로써 CTE는 데이터베이스 전문가와 데이터를 사용하는 모든 사람에게 매우 유용합니다. 다단계 계산을 단순화하든 계층적 데이터를 탐색하든 CTE를 마스터하면 더욱 효과적이고 효율적인 SQL 프로그래머가 될 수 있습니다.
FAQs
CTE는 복잡한 쿼리를 단순화하기 위해 SQL 문 내에서 사용되는 임시 명명된 결과 집합입니다.
예, 재귀적 CTE는 조직 차트 또는 트리와 같은 계층적 데이터를 처리할 수 있습니다.
예, 과도하거나 비효율적인 CTE 사용은 특히 대규모 테이블에서 성능을 저하시킬 수 있습니다.
백엔드 프로젝트 호스팅을 위한 최고의 선택, Leapcell입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하십시오.
제한 없이 프로젝트를 무료로 배포
- 사용량에 대해서만 지불하십시오. 요청도 없고 요금도 없습니다.
탁월한 비용 효율성
- 유휴 요금 없이 사용량에 따라 지불합니다.
- 예: $25는 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅
손쉬운 확장성 및 고성능
- 고도의 동시성을 쉽게 처리하기 위한 자동 확장
- 운영 오버헤드가 없으므로 구축에만 집중할 수 있습니다.
Documentation에서 자세히 알아보십시오!
X에서 팔로우하세요: @LeapcellHQ