콘텐츠로 건너뛰기

예제로 배우는 SQL SET/DECLARE 구문

이번 글에서는 SQL에서 변수를 선언하고 할당하는 데 사용되는 SET과 DECLARE 구문에 대해 알아보겠습니다. SQL에서 변수를 사용하는 것은 데이터 관리 및 분석 작업을 효율적으로 수행하는 데 중요합니다. 올바른 구문 사용법을 이해하고, 실제 예제를 통해 학습하며, 변수 사용 시 고려해야 할 사항을 살펴보겠습니다.

■ 예제: 월별 매출 분석

데이터 분석가인 여러분은 매월 회사의 매출 성과를 분석하여 경영진에게 보고해야 합니다. 매출 데이터는 Sales 테이블에 저장되어 있으며, 각 판매 거래에 대한 날짜(SaleDate), 판매액(SalesAmount), 그리고 고객 ID(CustomerID)를 포함하고 있습니다. 경영진은 특히 지난 달 전체의 매출 총액과 거래 건수를 알고 싶어 합니다.

DECLARESET 구문을 사용하여 지난 달의 시작과 끝 날짜를 동적으로 계산하고, 이를 기반으로 해당 기간 동안의 매출 총액과 거래 건수를 질의하는 방법을 SQL로 짜보겠습니다 (SQL 쿼리 정답은 아래에 있습니다).

■ SET과 DECLARE 구문 개요

SQL에서 변수는 데이터를 임시로 저장하는 저장소 역할을 합니다. DECLARE 구문은 변수를 선언하는 데 사용되며, SET 구문은 선언된 변수에 값을 할당하는 데 사용됩니다.

  • DECLARE: 변수를 선언하고 데이터 타입을 지정합니다. 선언된 변수는 스크립트 내에서 값이 할당되고 사용될 수 있습니다.
  • SET: 선언된 변수에 특정 값을 할당합니다. 값은 고정된 값일 수도 있고, 계산된 결과나 쿼리의 결과일 수도 있습니다.

■ 변수 선언하기 (DECLARE 구문 사용법)

변수를 선언할 때는 변수명 앞에 @ 기호를 붙이고, 데이터 타입을 지정해야 합니다. 예를 들어, 날짜 타입의 변수를 선언하는 방법은 다음과 같습니다.

DECLARE @StartDate DATE;

이 코드는 @StartDate라는 이름의 날짜 타입 변수를 선언합니다.

■ 변수에 값 할당하기 (SET 구문 사용법/동적 값 할당하기)

선언된 변수에 값을 할당할 때는 SET 구문을 사용합니다. 값은 직접 지정하거나, 다른 변수, 함수의 결과 등으로부터 동적으로 할당될 수 있습니다.

SET @StartDate = '2024-01-01';

또는 동적으로 날짜를 계산하여 할당하는 예시는 다음과 같습니다.

SET @StartDate = DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0);

■ 예제로 배우기

맨처음 예제를 살펴봅시다. 우리는 지난 달의 첫째 날과 마지막 날을 동적으로 계산하고 싶고, 이를 변수화하여 매달 같은 쿼리를 실행하고 싶습니다.

예제 쿼리는 다음 단계를 따릅니다:

  1. 변수 선언: @FirstDayOfLastMonth@LastDayOfLastMonth 변수를 DATE 타입으로 선언합니다.
  2. 변수에 값 할당: DATEADDDATEDIFF 함수를 사용하여 지난 달의 첫째 날과 마지막 날을 계산하고, 이를 변수에 할당합니다.
  3. 매출 데이터 조회: WHERE 절에서 변수를 사용하여 지난 달 동안의 매출 총액과 거래 건수를 계산합니다.
-- 지난 달의 첫째 날과 마지막 날을 계산하기 위한 변수 선언
DECLARE @FirstDayOfLastMonth DATE, @LastDayOfLastMonth DATE;

-- 지난 달의 첫째 날 계산
SET @FirstDayOfLastMonth = DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0);

-- 지난 달의 마지막 날 계산
SET @LastDayOfLastMonth = DATEADD(DAY, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0));

-- 지난 달의 매출 총액과 거래 건수 조회
SELECT
    SUM(SalesAmount) AS TotalSales,
    COUNT(*) AS NumberOfTransactions
FROM
    Sales
WHERE
    SaleDate >= @FirstDayOfLastMonth AND
    SaleDate <= @LastDayOfLastMonth;

이 예제는 SQL 변수를 사용하여 동적 날짜 범위를 계산하고, 이를 기반으로 데이터를 조회하는 방법을 보여줍니다. 비즈니스에서 이러한 방식을 활용하면 매월 반복적인 데이터 분석 작업을 자동화하고, 보다 정확하고 효율적으로 정보를 제공할 수 있습니다.

■ 변수 사용 시 주의사항

  • 스코프 이해하기: 변수는 선언된 배치나 프로시저 내에서만 유효합니다. 다른 배치나 프로시저에서는 접근할 수 없습니다.
  • 성능 최적화 팁: 변수를 사용하여 쿼리를 반복 실행하는 경우, 쿼리의 재사용 가능성을 높여 성능을 최적화할 수 있습니다.
  • 변수 사용의 장단점: 변수는 코드의 가독성을 높이고, 동적 쿼리 작성을 용이하게 합니다. 하지만, 과도한 변수 사용은 메모리 사용량 증가로 이어질 수 있으므로 주의해야 합니다.