Advanced SQL: CTE and SUBQUERY
Advanced SQL: CTE and SUBQUERY
Description
SUBQUERY는 하나의 SQL 쿼리 안에 포함된 또 다른 쿼리를 의미한다. 메인 쿼리가 실행되기 전에 먼저 실행되며, 그 결과를 기반으로 조건 비교나 데이터 조회를 수행한다.
CTE(Common Table Expression)는 WITH 키워드를 사용하여 임시 결과 집합을 정의한 뒤, 이를 메인 쿼리에서 참조하는 방식이다. 복잡한 쿼리를 구조적으로 나누어 가독성과 유지보수성을 높일 수 있다.
Syntax
SUBQUERY
괄호 안에 SUBQUERY를 작성하며 WHERE, FROM, SELECT 절 등 다양한 위치에서 사용 가능하다.
SELECT column_name
FROM table_name
WHERE column_name IN (
SELECT column_name
FROM table_name
);
CTE
WITH을 사용하요 CTE 작성을 시작하고 cte_name란에 해당 임시 결과 집합의 이름을 지정합니다. CTE를 통해 얻은 결과는 메인 쿼리에서 일반 테이블처럼 참조 가능하다.
WITH cte_name AS (
SELECT column_name
FROM table_name
)
SELECT *
FROM cte_name;
Example
Subquery in WHERE
평균 주문 금액보다 큰 주문만 조회한다.
SELECT order_id, amount
FROM orders
WHERE amount > (
SELECT AVG(amount)
FROM orders
);
Subquery in FROM
상품별 평균 가격을 계산한 뒤 조회한다.
SELECT avg_price
FROM (
SELECT AVG(price) AS avg_price
FROM products
) AS sub;
CTE Example
고객별 총 주문 금액을 먼저 계산한 뒤, 1000 이상인 고객만 조회한다.
WITH customer_totals AS (
SELECT customer_id, SUM(amount) AS total_amount
FROM orders
GROUP BY customer_id
)
SELECT *
FROM customer_totals
WHERE total_amount >= 1000;
Reference
This post is licensed under CC BY 4.0 by the author.