SQL Advanced: WITH

하하호호훈이·2025년 5월 30일

SQL(MySQL) MUST KNOW

목록 보기
18/23
post-thumbnail

이번에는 SQL에서 복잡한 쿼리를 더 명확하게 작성하고 재사용할 수 있도록 도와주는 WITH 절, 즉 공통 테이블 표현식(CTE: Common Table Expression) 에 대해 알아봅시다!

CTE는 특히 서브쿼리를 여러 번 중복해서 쓰지 않아도 되도록 하고, 쿼리 가독성과 유지보수성을 높여주는 장점이 있습니다.

💡 모든 예시도 company_dbemployees, projects 테이블 기반으로 작성됩니다.


✅ WITH 절 기본 구조

WITH cte_name AS (
  SELECT ...
)
SELECT *
FROM cte_name;
  • cte_name: 임시로 사용할 테이블 이름
  • 괄호 안에 작성하는 쿼리가 실행되어 CTE처럼 사용됨

1. 예제 ① 평균 급여보다 높은 직원 조회

WITH avg_salary AS (
  SELECT AVG(salary) AS avg_val
  FROM employees
)
SELECT e.first_name, e.salary
FROM employees e, avg_salary
WHERE e.salary > avg_salary.avg_val;

예시 결과:

first_namesalary
Alice6500.50
Charlie7100.00

2. 예제 ② 부서별 평균 급여 계산

WITH dept_avg AS (
  SELECT department, AVG(salary) AS avg_salary
  FROM employees
  GROUP BY department
)
SELECT * FROM dept_avg;

예시 결과:

departmentavg_salary
Engineering6800.25
Marketing5400.00
HR4300.75

3. 예제 ③ 프로젝트 예산이 평균 이상인 직원 조회

WITH project_avg AS (
  SELECT emp_id, AVG(budget) AS avg_budget
  FROM projects
  GROUP BY emp_id
)
SELECT e.first_name, p.project_name, p.budget
FROM employees e
JOIN projects p ON e.emp_id = p.emp_id
JOIN project_avg a ON p.emp_id = a.emp_id
WHERE p.budget > a.avg_budget;

예시 결과:

first_nameproject_namebudget
AliceAI Platform100000.00

✅ 정리 요약: WITH 절의 장점

특징설명
재사용성 향상같은 서브쿼리를 여러 번 쓸 필요 없이 재사용 가능
가독성 향상복잡한 중첩 SELECT문을 분리해 구조 명확화
유지보수 용이CTE 이름만 바꾸면 전체 쿼리 수정 없이 재활용 가능
다중 CTE 지원쉼표(,)로 여러 CTE를 함께 정의할 수 있음

다음 파트에서는 조건에 따라 서로 다른 값을 반환할 수 있는 CASE WHEN 문을 알아볼게요 😉

profile
AI, Data Science/Analysis 리뷰용가리지용 😆

0개의 댓글