저장된 쿼리문. 다른 쿼리문에서 호출 시마다 실행된다. 사실상 쿼리문의 alias
질의의 결과를 저장하는 것이 아니라 질의 그 자체를 저장한다
물리적 객체로 디스크에 저장된다
CTE란 해당 쿼리문 내에서만 존재하는 일시적인 테이블(정확히는 결과의 집합)을 말한다
메모리에서만 존재하며 WITH문 사용시에만 연산된다. 해당 쿼리문이 끝나면 버려진다
inline view라고 부르기도 한다
재귀가 가능해 트리 구조 관련해 사용하거나 할때 유용하다
WITH
cte1 AS (SELECT a, b FROM table1)
cte2 AS (SELECT c, d, FROM table2)
SELECT b, d FROM cte1 JOIN cte2
WHERE cte1.a = cte2.c;
저장위치 | 사용 구역 | 재귀 | 인덱싱 | |
---|---|---|---|---|
View | 디스크 | 여러 sql문 | X | O |
CTE | 메모리 | 해당 sql문 | O | X |
CREATE VIEW top_app_per_category AS
WITH top_app_max_reviews AS (
SELECT category, MAX(reviews) AS max_num_reviews
FROM top_apps
GROUP BY category)
SELECT ta.name, ta.category, ta.reviews
FROM top_apps ta
JOIN top_app_max_reviews tamr
ON ta.reviews = tamr.max_num_reviews;
https://learnsql.com/blog/difference-between-sql-cte-and-view/