MSSQL에서 CTE(Common Table Expression)는 임시적인 결과 집합을 만들어 SQL 쿼리의 가독성을 높이고, 재귀 쿼리를 작성할 때 유용하게 사용할 수 있습니다.
이번 포스팅에서는 CTE의 개념, 기본 사용법, 활용 사례를 쉽게 설명해 보겠습니다. ✅
🔍 1. CTE란?
CTE (Common Table Expression)는
쿼리 안에서 임시적인 결과 집합을 만들어, 마치 뷰(View)처럼 사용할 수 있는 기능입니다.
🔹 WITH
키워드를 사용하여 정의하며,
🔹 SELECT
, INSERT
, UPDATE
, DELETE
문과 함께 사용할 수 있습니다.
✅ CTE의 장점
- 쿼리 가독성 향상: 서브쿼리를 줄이고, SQL을 더 읽기 쉽게 만든다.
- 재귀 쿼리 지원: 계층 구조 데이터를 쉽게 조회할 수 있다.
- 임시 데이터 활용: 한 번 정의한 결과 집합을 여러 번 재사용할 수 있다.
🛠 2. CTE 기본 사용법
✅ CTE 기본 구조
WITH CTE명 (컬럼1, 컬럼2, ...) AS (
-- CTE 내부 쿼리
SELECT 컬럼1, 컬럼2, ...
FROM 테이블명
WHERE 조건
)
-- CTE 결과를 활용한 메인 쿼리
SELECT * FROM CTE명;
🔹 기본 예제: 직원 테이블에서 급여가 5000 이상인 직원 조회
WITH HighSalaryEmployees AS (
SELECT EmployeeID, Name, Salary
FROM Employees
WHERE Salary >= 5000
)
SELECT * FROM HighSalaryEmployees;
✅ CTE를 사용하면 복잡한 서브쿼리를 줄일 수 있어 가독성이 좋아집니다.
🔄 3. CTE 활용 예제
🎯 1) CTE로 여러 번 재사용하기
CTE를 활용하면 동일한 서브쿼리를 여러 번 사용할 때 유용합니다.
WITH HighSalaryEmployees AS (
SELECT EmployeeID, Name, Salary
FROM Employees
WHERE Salary >= 5000
)
SELECT COUNT(*) AS EmployeeCount FROM HighSalaryEmployees;
SELECT Name FROM HighSalaryEmployees WHERE Name LIKE 'J%';
✅ HighSalaryEmployees
CTE를 두 번 사용했지만, 한 번만 정의하면 됨!
🎯 2) 재귀 CTE 활용 (계층 구조 데이터 조회)
CTE는 재귀 쿼리를 작성할 때도 매우 유용합니다.
예를 들어, 조직도(상사-부하 관계) 데이터를 조회하는 경우에 사용할 수 있습니다.
WITH EmployeeHierarchy AS (
-- 기본 계층 (최상위 관리자)
SELECT EmployeeID, Name, ManagerID, 1 AS Level
FROM Employees
WHERE ManagerID IS NULL
UNION ALL
-- 재귀적으로 부하 직원 추가
SELECT e.EmployeeID, e.Name, e.ManagerID, eh.Level + 1
FROM Employees e
INNER JOIN EmployeeHierarchy eh ON e.ManagerID = eh.EmployeeID
)
SELECT * FROM EmployeeHierarchy ORDER BY Level;
✅ 재귀 CTE를 사용하면 계층 구조 데이터를 쉽게 조회할 수 있습니다.
🎯 3) CTE를 이용한 데이터 업데이트
CTE는 단순 조회뿐만 아니라, 업데이트(UPDATE), 삭제(DELETE), 삽입(INSERT) 도 가능합니다.
✅ 급여 5000 이상인 직원의 급여를 10% 인상하는 예제
WITH HighSalaryEmployees AS (
SELECT EmployeeID, Salary
FROM Employees
WHERE Salary >= 5000
)
UPDATE Employees
SET Salary = Salary * 1.1
FROM Employees e
INNER JOIN HighSalaryEmployees h ON e.EmployeeID = h.EmployeeID;
✅ CTE를 활용하면 대상 데이터를 명확하게 정의하고 업데이트할 수 있습니다.
🎯 4. CTE vs 서브쿼리 vs 뷰 비교
방식 | 설명 | 장점 | 단점 |
---|---|---|---|
CTE | 임시적인 결과 집합 | 가독성 향상, 재귀 지원, 여러 번 재사용 가능 | 실행 후 자동 삭제 |
서브쿼리 | 쿼리 내부에서 중첩하여 사용 | 간단한 연산에 적합 | 복잡하면 가독성이 떨어짐 |
뷰(View) | 데이터베이스에 저장되는 가상 테이블 | 여러 쿼리에서 재사용 가능 | 데이터베이스에 저장 필요 |
✅ CTE는 뷰처럼 별도 저장이 필요 없으며, 서브쿼리보다 가독성이 좋습니다!
🎯 5. 마무리
🔹 CTE(Common Table Expression)는 SQL 쿼리를 더 가독성 좋게 만들고, 재귀 쿼리를 쉽게 작성할 수 있도록 도와줍니다.
🔹 일반적인 서브쿼리보다 효율적이며, 뷰를 만들 필요 없이 임시로 데이터를 가공할 때 유용합니다.
🔹 재귀 CTE를 활용하면 조직도나 계층 구조 데이터를 손쉽게 조회할 수 있습니다.
💡 MSSQL에서 CTE를 활용하면 복잡한 SQL을 더 쉽고, 효율적으로 작성할 수 있습니다! 🚀
'Programming' 카테고리의 다른 글
🚀 MSSQL에서 INDEX를 활용한 성능 최적화 전략 (1) | 2025.03.12 |
---|---|
🚀 MSSQL에서 동적 SQL(Dynamic SQL) 활용하기 (0) | 2025.03.11 |
📌 MSSQL에서 그룹별 최신 데이터 가져오기 (0) | 2025.03.09 |
🔗 MSSQL에서 JOIN 다루기 – 기본부터 고급 활용까지! 🚀 (0) | 2025.03.08 |
🛠 MSSQL에서 STRING 조작 (문자열 합치기, 자르기, 치환하기) (0) | 2025.03.07 |