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/
'개발 > Database' 카테고리의 다른 글
Oracle, SQL Server Architecture (0) | 2020.08.28 |
---|---|
규칙 기반 옵티마이저(RBO), 비용 기반 옵티마이저(CBO) (0) | 2020.08.25 |
ANSI SQL, Transact-SQL(T-SQL) (0) | 2020.08.16 |
계층형 질의(Hierarchical Query) (0) | 2020.08.14 |
ORM(Object Relational Mapping) (0) | 2020.06.13 |