MSSQL WITH 사용 방법 (쿼리 분리)
- Database
- 2023. 10. 6.
SQL Server에서 WITH 명령어는 Common Table Expressions (CTE)를 정의하는 데 사용됩니다. CTE란 복잡한 쿼리를 단순화하거나 쿼리 내에서 여러 번 재사용하기 위해 사용하는 일시적인 결과 세트를 의미합니다. CTE를 사용하면 복잡한 쿼리를 분리해서 쿼리를 가독성 있게 짤 수 있는 장점이 있습니다.
WITH
사용 구문
WITH CTE_Name (Column1, Column2, Column3, ...)
AS (
-- CTE 정의, 여기에 SELECT 문을 사용하여 데이터를 추출합니다.
SELECT Column1, Column2, Column3, ...
FROM SomeTable
WHERE SomeCondition
)
-- 이후 CTE_Name을 참조하여 쿼리를 작성합니다.
SELECT * FROM CTE_Name;
CTE는 주로 재귀 쿼리, 계층적 데이터 쿼리, 중복 로직의 제거 등 다양한 상황에서 사용됩니다. CTE는 쿼리 실행 시점에만 존재하며, 쿼리 실행이 종료되면 사라집니다.
예시 1)
Employees 테이블에서 Salary가 50000 이상인 직원의 이름과 급여를 조회하는 쿼리를 WITH 명령어를 사용하면 다음과 같이 할 수 있습니다.
WITH HighSalaryEmployees (Name, Salary) -- Name, Salary는 별칭입니다.
AS (
SELECT EmployeeName, Salary
FROM Employees
WHERE Salary >= 50000
)
SELECT * FROM HighSalaryEmployees;
물론 이런 간단한 쿼리는 WITH를 쓰는 것보다 오히려 그냥 아래와 같이 조회하는 게 간결하다고 생각하실 수 있습니다.
SELECT EmployeeName, Salary
FROM Employees
WHERE Salary >= 50000;
하지만 쿼리가 복잡해질수록 WITH 구문을 사용해서 여러 단계로 나누어 작성하면 가독성이 향상되고 디버깅도 용이해집니다.
예시 2)
주문 데이터를 나타내는 orders 테이블에서 2023년 2월에 각 사용자가 총 얼마를 주문했는지를 조회하면 아래와 같습니다.
WITH FebruaryOrders AS (
SELECT
customer_id,
SUM(amount) AS total_amount
FROM orders
WHERE MONTH(order_date) = 2 AND YEAR(order_date) = 2023
GROUP BY customer_id
)
SELECT * FROM FebruaryOrders;
반응형
'Database' 카테고리의 다른 글
MSSQL 데이터베이스 / 로그인 생성 방법 (권한 설정) (0) | 2023.10.16 |
---|---|
MSSQL WITH (NOLOCK) 사용 방법 (0) | 2023.10.10 |
MYSQL innodb_buffer_pool_size 변경 방법 (0) | 2023.09.27 |
MSSQL GO 명령어 사용 방법 (배치 구분자) (0) | 2023.08.29 |
PostgreSQL 최대 사용 메모리 수정하는 방법 (0) | 2023.08.29 |