✅ 기본 개념

SQL에서 CASE 문은 조건 분기를 할 수 있는 구문입니다.
C/C++의 if, switch문과 유사하게 사용할 수 있으며, 주로 SELECT절에서 많이 사용되지만 WHERE, ORDER BY, GROUP BY 등에서도 활용할 수 있습니다.


🧩 CASE 문법 1 - SWITCH문처럼 사용

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 컬럼이름으로 별칭 부여


🧩 CASE 문법 2 - IF문처럼 조건문 사용

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;

🎯 birthMonthNULL인 경우는 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 외에 사용 예시

🔸 ORDER BY에서 사용

SELECT nameFirst, birthMonth
FROM players
ORDER BY
  CASE
    WHEN birthMonth IS NULL THEN 13
    ELSE birthMonth
  END;

🔸 WHERE 조건문에 사용

SELECT *
FROM players
WHERE
  CASE
    WHEN deathYear IS NULL THEN 1
    ELSE 0
  END = 1;

WHERE 절에서 CASE는 복잡한 조건 로직을 구현할 때 유용합니다.


profile
李家네_공부방

0개의 댓글