SQL 흐름 제어 가이드: CASE, IF, IFNULL, NULLIF 사용법과 예제
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 = TotalAmount →
NULL - PaidAmount ≠ TotalAmount →
PaidAmount반환
7. 요약 정리표
| 함수 | 사용 목적 | 특징 |
|---|---|---|
CASE |
다중 조건 분기 처리 | 가장 유연하고 강력한 흐름 제어 도구 |
IF() |
간단한 조건 분기 | 삼항 연산자 느낌으로 간결함 |
IFNULL() |
NULL 여부 판단 및 대체 | NULL-safe 출력 |
NULLIF() |
두 값 비교 후 같으면 NULL 반환 | 특정 일치값 필터링 시 유용 |
질문 정리
- CASE와 IF의 차이는 뭔가요?
CASE는 복잡한 조건 처리에,IF()는 단순 비교에 적합합니다.
- NULL 처리에는 무엇을 사용해야 하나요?
IFNULL()또는COALESCE()를 사용하면 안전하게 NULL을 대체할 수 있습니다.
- CASE 문의 ELSE는 꼭 써야 하나요?
- 아니요. 생략하면 모든 WHEN이 실패할 경우 NULL이 반환됩니다.
- NULLIF는 어떤 상황에서 유용한가요?
- 두 값이 같을 때만 NULL을 반환하고 싶을 때 사용합니다. 예: 중복 방지, 조건 필터링
- 흐름 제어 함수는 SELECT 외에도 사용 가능한가요?
- 대부분 SELECT, WHERE, ORDER BY 등 다양한 SQL 구문에서 사용 가능합니다.
댓글남기기