SQL에서 CASE 문은 조건 분기를 할 수 있는 구문입니다.
C/C++의 if, switch문과 유사하게 사용할 수 있으며, 주로 SELECT절에서 많이 사용되지만 WHERE, ORDER BY, GROUP BY 등에서도 활용할 수 있습니다.
SELECT *,
CASE birthMonth
WHEN 1 THEN N'겨울'
WHEN 2 THEN N'겨울'
WHEN 3 THEN N'봄'
WHEN 4 THEN N'봄'
WHEN 5 THEN N'봄'
WHEN 6 THEN N'여름'
WHEN 7 THEN N'여름'
WHEN 8 THEN N'여름'
WHEN 9 THEN N'가을'
WHEN 10 THEN N'가을'
WHEN 11 THEN N'가을'
WHEN 12 THEN N'겨울'
ELSE N'몰라요'
END AS birthSeason
FROM players;
✅
CASE 열이름으로 시작하여 각WHEN 값 THEN 결과형태로 분기
✅ELSE는 기타 예외 처리, 생략 시 해당 조건은 NULL로 반환됨
✅END AS 컬럼이름으로 별칭 부여
SELECT *,
CASE
WHEN birthMonth <= 2 THEN N'겨울'
WHEN birthMonth <= 5 THEN N'봄'
WHEN birthMonth <= 8 THEN N'여름'
WHEN birthMonth <= 11 THEN N'가을'
ELSE N'겨울'
END AS birthSeason
FROM players;
✅
CASE뒤에 열 이름 없이,WHEN 조건으로 분기
✅IF - ELSE IF - ELSE처럼 작동함
✅ 비교 연산자를 자유롭게 사용 가능
SELECT nameFirst, birthMonth,
CASE
WHEN birthMonth IS NULL THEN N'몰라요'
WHEN birthMonth <= 2 THEN N'겨울'
WHEN birthMonth <= 5 THEN N'봄'
WHEN birthMonth <= 8 THEN N'여름'
WHEN birthMonth <= 11 THEN N'가을'
ELSE N'겨울'
END AS birthSeason
FROM players;
🎯
birthMonth가NULL인 경우는IS NULL로 조건 확인해야 함!
| 항목 | 설명 |
|---|---|
ELSE 생략 시 | 조건에 해당되지 않는 경우 NULL 반환 |
NULL 비교 시 | 반드시 IS NULL 사용 (= NULL은 실패함) |
CASE column 형식 | switch-case처럼 특정 값에 대한 분기 |
CASE WHEN 조건 형식 | if-else처럼 조건문 작성 가능 |
| 사용 위치 | SELECT, WHERE, ORDER BY, GROUP BY 등 다방면에서 사용 가능 |
SELECT name, score,
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
WHEN score >= 60 THEN 'D'
ELSE 'F'
END AS grade
FROM studentGrades;
CASE는 조건 분기 도구이자, SELECT 결과를 가공하기 위한 강력한 문법NULL 비교에는 반드시 IS NULL, IS NOT NULL 사용WHEN, THEN, ELSE, END 키워드는 항상 쌍으로 맞춰 사용SELECT nameFirst, birthMonth
FROM players
ORDER BY
CASE
WHEN birthMonth IS NULL THEN 13
ELSE birthMonth
END;
SELECT *
FROM players
WHERE
CASE
WHEN deathYear IS NULL THEN 1
ELSE 0
END = 1;
WHERE절에서CASE는 복잡한 조건 로직을 구현할 때 유용합니다.