2 분 소요

SQL에서 흐름 제어(Flow Control)는 조건에 따라 다른 값을 반환하거나 처리 방식을 바꾸기 위해 사용됩니다. 특히 보고서 생성, NULL 처리, 조건별 분류 등에서 유용합니다. 이 글에서는 CASE, IF, IFNULL, NULLIF 함수의 문법과 실전 예제를 한눈에 정리했습니다.


1. 흐름 제어 함수 종류 및 기능 요약

함수/연산자 주요 기능 특징
CASE 여러 조건을 만족하는 경우에 따라 값 반환 복잡한 조건 분기 처리 가능
IF() 조건이 참이면 한 값, 거짓이면 다른 값 반환 간단한 조건 처리에 적합
IFNULL() 값이 NULL일 경우 대체 값 반환 NULL 처리에 유용
NULLIF() 두 값이 같으면 NULL, 다르면 첫 번째 값 반환 특정 값 비교 시 활용

2. CASE 문

문법

1) 값 비교 방식

CASE value
    WHEN compare_value1 THEN result1
    WHEN compare_value2 THEN result2
    ...
    [ELSE resultN]
END

2) 조건 기반 방식

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    [ELSE resultN]
END

예제

SELECT
    CASE 0
        WHEN 0 THEN 'zero'
        WHEN 1 THEN 'one'
        ELSE 'more'
    END AS Result;  -- 결과: 'zero'
SELECT
    CASE
        WHEN 5 > 3 THEN 'greater'
        WHEN 5 = 3 THEN 'equal'
        ELSE 'less'
    END AS Result;  -- 결과: 'greater'

3. IF() 함수

문법

IF(condition, true_result, false_result)

예제

SELECT IF(0 < 1, 'yes', 'no') AS Result;       -- 결과: 'yes'
SELECT IF(5 = 3, 'equal', 'not equal') AS Result; -- 결과: 'not equal'

4. IFNULL() 함수

문법

IFNULL(value, alternate_value)

예제

SELECT IFNULL(NULL, 'This is NULL') AS Result;     -- 결과: 'This is NULL'
SELECT IFNULL('MySQL', 'No Value') AS Result;      -- 결과: 'MySQL'

✅ value가 NULL이면 alternate_value가 반환됩니다.


5. NULLIF() 함수

문법

NULLIF(expr1, expr2)

예제

SELECT NULLIF(3, 3) AS Result;  -- 결과: NULL
SELECT NULLIF(5, 3) AS Result;  -- 결과: 5

✅ 두 값이 같으면 NULL, 다르면 첫 번째 값을 반환합니다.


6. 실전 예제 모음

6.1. CASE로 등급 분류

SELECT
    RoomNum,
    CASE
        WHEN RoomNum > 100 THEN 'Premium'
        WHEN RoomNum BETWEEN 50 AND 100 THEN 'Standard'
        ELSE 'Economy'
    END AS RoomType
FROM Reservation;

RoomNum 값에 따라 등급을 다르게 반환합니다.


6.2. NULL 처리 with IFNULL()

SELECT
    CustomerName,
    IFNULL(Address, 'No Address Provided') AS AddressInfo
FROM Customer;

Address가 NULL이면 ‘No Address Provided’를 출력합니다.


6.3. 값 비교 with NULLIF()

SELECT
    ReservationID,
    NULLIF(PaidAmount, TotalAmount) AS PaymentStatus
FROM Reservation;
  • PaidAmount = TotalAmountNULL
  • PaidAmount ≠ TotalAmountPaidAmount 반환

7. 요약 정리표

함수 사용 목적 특징
CASE 다중 조건 분기 처리 가장 유연하고 강력한 흐름 제어 도구
IF() 간단한 조건 분기 삼항 연산자 느낌으로 간결함
IFNULL() NULL 여부 판단 및 대체 NULL-safe 출력
NULLIF() 두 값 비교 후 같으면 NULL 반환 특정 일치값 필터링 시 유용

질문 정리

  1. CASE와 IF의 차이는 뭔가요?
    • CASE복잡한 조건 처리에, IF()단순 비교에 적합합니다.
  2. NULL 처리에는 무엇을 사용해야 하나요?
    • IFNULL() 또는 COALESCE()를 사용하면 안전하게 NULL을 대체할 수 있습니다.
  3. CASE 문의 ELSE는 꼭 써야 하나요?
    • 아니요. 생략하면 모든 WHEN이 실패할 경우 NULL이 반환됩니다.
  4. NULLIF는 어떤 상황에서 유용한가요?
    • 두 값이 같을 때만 NULL을 반환하고 싶을 때 사용합니다. 예: 중복 방지, 조건 필터링
  5. 흐름 제어 함수는 SELECT 외에도 사용 가능한가요?
    • 대부분 SELECT, WHERE, ORDER BY 등 다양한 SQL 구문에서 사용 가능합니다.

카테고리:

업데이트:

댓글남기기