본문 바로가기

개발/Database

CTE(Common Table Expressions)

CTE는 standard SQL feature 이며, SELECT, INSERT, UPDATE, DELETE 또는 CREATE VIEW 문 하나의 실행 범위 내에서 정의되늰 임시 결과 집합이다. CTE 는 개체로 저장되지 않고, 쿼리 지속 시간 동안만 존재한다는 점에서 파생 테이블과 비슷하나, CTE는 파생 테이블과 달리 자체 참조가 가능하며 동일 쿼리에서 여러 번 참조할 수 있다.

 

CTE는 항상 결과 집합을 반환합니다. 예를들어 기본 쿼리 본문에서 파생 테이블을 제거하는데 사용할 수 있습니다.

 

SQL Server 에서 CTE 는 SELECT 문에서 사용할 수 있는 임시 결과 집합을 정의합니다. 복잡한 쿼리를 관리하는 편리한 방법이 됩니다.

공통 테이블 표현식은 WITH 연산자를 사용하여 SQL문 내부에서 정의됩니다. 이러한 방식으로 하나 이상의 공통 테이블 표현식을 정의할 수 있습니다.

 

파란색 부분은 CTE이며 SQL에서 자체 실행 가능한 쿼리가 포함되어 있습니다. 이를 CTE 쿼리 정의라고 합니다.

 

CTE를 사용하는 이유중 일부는 다음과 같습니다.

 

- 가독성 : CTE는 가독성을 높이며 쿼리 논리를 모두 하나의 큰 쿼리로 묶는 대신에 문 뒷부분에서 결합되는 여러 CTE를 만듭니다. 이를 통해 필요한 데이터 청크를 가져와 최종 SELECT에서 결합할 수 있습니다.

- 뷰 대체 : 뷰를 CTE로 대체할 수 있습니다. 뷰를 만들 수 있는 권한이 없거나 해당 쿼리에서만 사용되어 만들지 않으려는 경우 유용합니다.

- 재귀 : CTE를 사용하여 자신을 호출할 수 있는 재귀 쿼리를 만듭니다. 이는 조직도와 같은 계층적 데이터에 대해 작업해야 할 때 편리합니다.

- 제한 사항 : 자체 참조(재귀) 또는 비 결정적 함수를 사용하여 GROUP BY 수행과 같은 SELECT 문 제한을 극복합니다.

- 순위 : ROW_NUMBER, RANK, NTITLE 등과 같은 순위 함수를 사용하고자 할 때 사용할 수 있습니다.

 

CTE의 유형은 재귀 CTE와 비 재귀 CTE의 두가지 범주로 나눌 수 있습니다.

 

재귀 CTE는 자신을 참조하는 일반적인 테이블 표현식입니다. 비재귀적 CTE는 자신을 참조하지 않으며 이해하기 쉽습니다.

 

# 참고

https://www.essentialsql.com/introduction-common-table-expressions-ctes/

반응형