SQL Common Table Expressions(CTEs) 이해
Min-jun Kim
Dev Intern · Leapcell

Key Takeaways
- CTE는 복잡한 SQL 쿼리를 더 읽기 쉽고 유지 관리하기 쉽게 만듭니다.
- CTE는 계층적 데이터에 대한 재귀 쿼리를 지원합니다.
- CTE는 임시적이며 쿼리 실행 중에만 존재합니다.
구조적 쿼리 언어(SQL)는 관계형 데이터베이스를 관리하고 조작하는 데 필수적입니다. 데이터베이스 쿼리가 더 복잡해짐에 따라 SQL은 코드를 더 읽기 쉽고 유지 관리하기 쉽게 만드는 다양한 도구를 제공합니다. 가장 강력한 기능 중 하나는 **Common Table Expression(CTE)**입니다. 이 기사에서는 CTE가 무엇인지, 어떻게 작동하는지, SQL 프로그래밍에서 왜 유용한지 살펴봅니다.
Common Table Expression이란 무엇입니까?
Common Table Expression(CTE)은 SELECT, INSERT, UPDATE 또는 DELETE 문 내에서 참조할 수 있는 임시 결과 집합입니다. CTE는 특히 여러 하위 쿼리 또는 재귀 연산과 관련된 복잡한 쿼리를 단순화하는 데 도움이 됩니다.
CTE는 WITH
키워드를 사용하여 정의되며, CTE 이름과 CTE를 정의하는 쿼리가 뒤따릅니다. CTE는 문의 실행 중에만 존재합니다.
구문 예제
WITH CTE_Name (column1, column2, ...) AS ( SELECT column1, column2, ... FROM table_name WHERE condition ) SELECT * FROM CTE_Name;
CTE 사용의 장점
SQL 쿼리에서 CTE를 사용하는 데에는 몇 가지 이유가 있습니다.
- 향상된 가독성: CTE는 복잡한 쿼리를 논리적 빌딩 블록으로 나눕니다.
- 코드 재사용성: 쿼리에서 CTE를 여러 번 참조할 수 있습니다.
- 재귀 지원: CTE는 계층적 또는 트리 구조 데이터에 유용한 재귀 쿼리를 활성화합니다.
- 유지 관리성: CTE는 코드 반복을 줄여 쿼리를 디버그하고 수정하기 쉽게 만듭니다.
실제 예제
1. 하위 쿼리 단순화
회사의 평균 급여보다 높은 급여를 받는 직원의 목록을 표시하려는 경우:
WITH AvgSalary AS ( SELECT AVG(salary) AS avg_sal FROM employees ) SELECT name, salary FROM employees WHERE salary > (SELECT avg_sal FROM AvgSalary);
2. 재귀 CTE 예제
재귀 CTE는 조직 차트 또는 범주 트리와 같은 계층적 데이터에 특히 유용합니다.
예: 직원 테이블에서 관리자의 모든 부하 직원을 찾습니다.
WITH RECURSIVE Subordinates AS ( SELECT employee_id, name, manager_id FROM employees WHERE manager_id IS NULL -- 최상위 관리자부터 시작 UNION ALL SELECT e.employee_id, e.name, e.manager_id FROM employees e INNER JOIN Subordinates s ON e.manager_id = s.employee_id ) SELECT * FROM Subordinates;
CTE vs. 임시 테이블 및 뷰
- 임시 테이블: 세션 기간 동안 데이터베이스에 존재하며 명시적인 생성 및 삭제가 필요합니다.
- 뷰: 데이터베이스 스키마에 저장된 영구 객체입니다.
- CTE: 단일 쿼리 실행 중에만 존재하므로 가볍고 중간 계산에 이상적입니다.
CTE의 제한 사항
CTE는 유용하지만 제한 사항이 있습니다.
- 인덱싱되지 않으며 큰 데이터 세트에서 과도하게 사용하면 성능에 영향을 줄 수 있습니다.
- 해당 범위는 정의된 문으로 제한됩니다.
결론
Common Table Expression(CTE)은 복잡한 쿼리를 작성, 읽기 및 유지 관리하기 훨씬 쉽게 만드는 강력한 SQL 기능입니다. 논리를 관리 가능한 부분으로 나누고, 재귀를 지원하고, 중첩된 하위 쿼리에 대한 더 깔끔한 대안을 제공합니다. CTE를 마스터함으로써 SQL 개발자는 더 효율적이고 유지 관리 가능한 데이터베이스 코드를 작성할 수 있습니다.
FAQs
CTE는 SQL 문 내에서 사용되는 임시 결과 집합입니다.
CTE는 쿼리 실행 중에만 존재하고, 임시 테이블은 더 오래 지속됩니다.
CTE를 사용하여 복잡하거나 재귀적인 SQL 쿼리를 단순화하십시오.
백엔드 프로젝트 호스팅을 위한 최고의 선택, Leapcell입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하십시오.
무료로 무제한 프로젝트 배포
- 사용량에 대해서만 지불하십시오. 요청이나 요금이 없습니다.
탁월한 비용 효율성
- 유휴 요금 없이 사용한 만큼 지불하십시오.
- 예: $25는 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
손쉬운 확장성과 고성능
- 고도의 동시성을 쉽게 처리하도록 자동 확장됩니다.
- 운영 오버헤드가 없으므로 구축에만 집중하십시오.
설명서에서 자세히 알아보십시오!
X에서 팔로우하세요: @LeapcellHQ