CASE WHEN 문은 SQL에서 if-else와 같은 조건 분기를 처리하는 구문입니다. SELECT 절에서 새로운 컬럼을 만들거나, WHERE, ORDER BY 절에서 복잡한 조건 처리를 할 때 유용하게 사용됩니다. SQLD 시험에서는 다양한 형태와 특징을 묻는 문제가 자주 출제됩니다.
CASE 컬럼명 WHEN 값1 THEN 결과1 WHEN 값2 THEN 결과2 ... ELSE 결과 ENDCASE WHEN 조건1 THEN 결과1 WHEN 조건2 THEN 결과2 ... ELSE 결과 ENDELSE 절: ELSE 절은 선택사항입니다. ELSE가 생략되면, 어떤 WHEN 조건에도 해당되지 않는 경우 NULL을 반환합니다.END 키워드: CASE 문은 항상 END로 끝내야 합니다.THEN 절과 ELSE 절에서 반환하는 값의 데이터 타입은 동일해야 합니다.WHEN 조건들은 위에서부터 순서대로 평가됩니다. 여러 조건이 참일 경우 가장 먼저 일치하는 조건의 결과를 반환하고 종료합니다.CASE WHEN은 SELECT 절뿐만 아니라 WHERE, GROUP BY, ORDER BY 등 다양한 SQL 절에서 사용할 수 있습니다.단순 CASE와 검색 CASE의 문법적 차이를 구분하는 문제가 자주 출제됩니다. (특히 CASE 뒤에 컬럼명이 바로 오는지, 아니면 WHEN 뒤에 조건식이 오는지)ELSE 절이 없을 때 반환되는 값이 NULL이라는 점을 묻는 문제가 단골입니다.CASE = SQL의 IF단순 CASE = CASE [컬럼] WHEN검색 CASE = CASE WHEN [조건식]ELSE 없으면 NULL1. 다음 쿼리의 실행 결과는?
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
CASE 문은 위에서부터 순서대로 조건을 평가합니다. product_id가 A%에 해당하는 경우, 첫 번째 WHEN 조건에 일치하므로 'A_상품'을 반환하고 종료됩니다. 두 번째 A% 조건은 평가되지 않습니다.CASE 문은 반드시 END로 닫아야 합니다.END가 누락되었습니다. B는 단순 CASE 문의 올바른 형태입니다. C는 THEN과 ELSE의 반환 타입('고액'과 sal)이 다를 수 있어 위험합니다. D는 THEN과 ELSE의 반환 타입('고가'와 0)이 달라 오류를 일으킬 수 있습니다. 하지만 SQL D는 오라클 DB 기반으로 VARCHAR2와 NUMBER 간 자동 형 변환을 지원하므로 해당 쿼리는 실행 가능합니다. 문제 의도에 따라 C와 D는 틀렸다고 볼 수도 있지만, 현실적으로는 실행이 가능하므로 올바른 SQL로 볼 수 있습니다. 가장 안전한 답은 B입니다.