CASE WHEN 문 정리

TJK·2025년 8월 22일

CASE WHEN 정리

CASE WHEN 문은 SQL에서 if-else와 같은 조건 분기를 처리하는 구문입니다. SELECT 절에서 새로운 컬럼을 만들거나, WHERE, ORDER BY 절에서 복잡한 조건 처리를 할 때 유용하게 사용됩니다. SQLD 시험에서는 다양한 형태와 특징을 묻는 문제가 자주 출제됩니다.


1. 두 가지 구문 형태 (★★★★★)

1. 단순 CASE 문

  • 구문: CASE 컬럼명 WHEN 값1 THEN 결과1 WHEN 값2 THEN 결과2 ... ELSE 결과 END
  • 특징: 특정 컬럼의 값이 무엇인지에 따라 결과를 분기합니다.

2. 검색 CASE 문

  • 구문: CASE WHEN 조건1 THEN 결과1 WHEN 조건2 THEN 결과2 ... ELSE 결과 END
  • 특징: 다양한 조건식에 따라 결과를 분기합니다. 가장 유연하게 사용됩니다.

2. 핵심 특징과 제약사항 (★★★★★)

  • ELSE 절: ELSE 절은 선택사항입니다. ELSE가 생략되면, 어떤 WHEN 조건에도 해당되지 않는 경우 NULL을 반환합니다.
  • END 키워드: CASE 문은 항상 END로 끝내야 합니다.
  • 데이터 타입: THEN 절과 ELSE 절에서 반환하는 값의 데이터 타입은 동일해야 합니다.
  • 실행 순서: WHEN 조건들은 위에서부터 순서대로 평가됩니다. 여러 조건이 참일 경우 가장 먼저 일치하는 조건의 결과를 반환하고 종료합니다.

3. SQLD 시험 핵심 포인트

  • CASE WHENSELECT 절뿐만 아니라 WHERE, GROUP BY, ORDER BY다양한 SQL 절에서 사용할 수 있습니다.
  • 단순 CASE검색 CASE의 문법적 차이를 구분하는 문제가 자주 출제됩니다. (특히 CASE 뒤에 컬럼명이 바로 오는지, 아니면 WHEN 뒤에 조건식이 오는지)
  • ELSE 절이 없을 때 반환되는 값이 NULL이라는 점을 묻는 문제가 단골입니다.

4. 최종 암기 팁

  • CASE = SQLIF
  • 단순 CASE = CASE [컬럼] WHEN
  • 검색 CASE = CASE WHEN [조건식]
  • ELSE 없으면 NULL

실전 기출 문제 스타일

1. 다음 쿼리의 실행 결과는?

SELECT product_id,
       CASE
           WHEN product_id LIKE 'A%' THEN 'A_상품'
           WHEN product_id LIKE 'B%' THEN 'B_상품'
           WHEN product_id LIKE 'A%' THEN 'A_시리즈'
           ELSE '기타'
       END as product_category
FROM products;

A. 'A_상품'
B. 'B_상품'
C. 'A_시리즈'
D. '기타'

2. 다음 중 CASE 문의 특징으로 옳지 않은 것은?
A. THEN 절의 결과는 동일한 데이터 타입이어야 한다.
B. END 키워드는 생략 가능하다.
C. WHERE 절에서 사용될 수 있다.
D. ELSE 절이 없을 때 조건에 일치하지 않으면 NULL을 반환한다.

3. 아래 CASE 문 중 문법적으로 올바른 것은?
A. CASE WHEN age > 10 THEN '십대' ELSE '기타'
B. CASE gender WHEN 'M' THEN '남' END
C. CASE WHEN sal > 1000 THEN '고액' ELSE sal
D. CASE WHEN (price > 1000) THEN '고가' ELSE 0 END


정답 및 해설

  • 문제 1 정답: A
    • 해설: CASE 문은 위에서부터 순서대로 조건을 평가합니다. product_idA%에 해당하는 경우, 첫 번째 WHEN 조건에 일치하므로 'A_상품'을 반환하고 종료됩니다. 두 번째 A% 조건은 평가되지 않습니다.
  • 문제 2 정답: B
    • 해설: CASE 문은 반드시 END로 닫아야 합니다.
  • 문제 3 정답: B, D
    • 해설: A는 END가 누락되었습니다. B는 단순 CASE 문의 올바른 형태입니다. C는 THENELSE의 반환 타입('고액'sal)이 다를 수 있어 위험합니다. D는 THENELSE의 반환 타입('고가'0)이 달라 오류를 일으킬 수 있습니다. 하지만 SQL D는 오라클 DB 기반으로 VARCHAR2와 NUMBER 간 자동 형 변환을 지원하므로 해당 쿼리는 실행 가능합니다. 문제 의도에 따라 C와 D는 틀렸다고 볼 수도 있지만, 현실적으로는 실행이 가능하므로 올바른 SQL로 볼 수 있습니다. 가장 안전한 답은 B입니다.
profile
Hello world!

0개의 댓글