조건 함수입문

CASE

조건에 따라 다른 값을 반환하는 if-else 같은 표현식

정의

프로그래밍 언어의 if-else와 비슷한 SQL 문법. CASE WHEN 조건1 THEN 값1 WHEN 조건2 THEN 값2 ELSE 값3 END 형태로 위에서 아래로 검사해 처음 참이 되는 분기의 값을 반환한다. 예: 연봉 1억 이상이면 'A', 5천 이상이면 'B', 나머지 'C' 같은 등급 분류에 자주 쓴다. 모든 DB에서 동작한다.

왜 중요한가?

복잡한 분류·등급 매기기를 SELECT 한 줄에 표현할 수 있다. 비슷한 Oracle 전용 DECODE 함수도 있지만, CASE가 표준이고 더 읽기 편해서 신규 코드는 CASE를 쓴다.

틀리기 쉬운 포인트

  • !WHERE 절의 CASE는 인덱스를 막을 수 있습니다.
  • !ELSE를 생략하면 모든 WHEN이 거짓일 때 NULL이 반환됩니다.
  • !DECODE는 Oracle 전용이고 가독성이 떨어집니다. CASE 권장.

예시

SELECT name, salary, CASE WHEN salary >= 10000 THEN 'A' WHEN salary >= 5000 THEN 'B' ELSE 'C' END AS grade
FROM employees;

성능 포인트

!WHERE 절 CASE는 인덱스를 막을 수 있다. 가능하면 OR/AND로 풀어 쓰는 것이 옵티마이저에게 더 친절.

관련 개념

관련 카테고리