컴퓨터 과학/데이터 베이스

MySQL에서 조건문 사용하기: IF vs CASE

Data Jun 2025. 8. 28. 11:46

SQL을 작성하다 보면 "조회 구문 안에서 조건문을 어떻게 써야 하지?"라는 고민을 많이 하게 됩니다.
MySQL에서는 IF와 CASE를 상황에 맞게 다르게 사용할 수 있는데요, 오늘은 그 차이를 정리해보겠습니다.

 

IF ... ELSEIF ... END IF (제어문)

MySQL 프로시저나 트리거에서 사용하는 절차적 조건문입니다.

IF score >= 90 THEN
    SET grade = 'A';
ELSEIF score >= 80 THEN
    SET grade = 'B';
ELSE
    SET grade = 'F';
END IF;

특징

  • 프로그래밍 언어의 if-else 구조와 유사
  • 프로시저, 함수, 트리거 내부에서만 사용 가능
  • 일반 SELECT 같은 조회 구문 안에서는 사용할 수 없습니다.

 

IF(expr, true_val, false_val) (함수형 IF)

조회 쿼리 안에서는 IF 함수를 이용할 수 있습니다.
삼항 연산자처럼 "조건 ? 참값 : 거짓값" 구조라고 생각하면 쉽습니다.

SELECT 
    name,
    IF(score >= 60, '합격', '불합격') AS result
FROM exam;

특징

  • 조회문(SELECT) 안에서 사용 가능
  • 조건이 단순할 때 간단하게 쓰기 좋음\

 

CASE WHEN ... THEN ... ELSE ... END

표준 SQL에서 제공하는 조건문으로, MySQL뿐만 아니라 대부분의 DBMS에서 지원합니다.

SELECT 
    name,
    CASE 
        WHEN score >= 90 THEN 'A'
        WHEN score >= 80 THEN 'B'
        ELSE 'F'
    END AS grade
FROM exam;

특징

  • 다중 분기 처리에 적합
  • SQL 표준이므로 이식성이 뛰어남
  • 조회 구문, WHERE, GROUP BY, ORDER BY 등 어디서든 사용 가능

 

결론

  • 프로시저 내부
    • IF ... ELSEIF ... END IF 제어문 사용 가능
    • CASE 구문 역시 사용 가능 (SELECT, SET 구문 안에서도 활용 가능)
  • 조회 구문(SELECT 등)
    • 제어문 IF ... ELSEIF는 사용할 수 없음
    • 대신 IF(expr, a, b) 함수CASE 구문을 사용할 수 있음

따라서,

  • 단순 분기에는 IF(expr, a, b) 함수가 간단
  • 다중 분기에는 CASE 구문이 가독성과 호환성 측면에서 더 적합
  • 프로시저 로직 제어에는 IF 구문을 많이 쓰지만, CASE도 동일하게 활용 가