DB

[MySQL] SELECT CASE / IF 조건 분기 (쿼리 조건문 활용)

인생아 2025. 6. 25. 14:45
반응형

MySQL에서 SELECT 구문으로 데이터를 조회할 때, 특정 조건에 따라 다른 값을 반환하고 싶을 때가 있다.
이럴 때 사용하는 게 바로 CASE 문IF 함수이다.
이 기능은 단순한 조회를 넘어서, 조건별 분기 로직을 쿼리 내에서 직접 구현할 수 있게 해준다.

예를 들어, 성별 코드가 'M'이면 '남자', 'F'면 '여자'로 표기하고 싶은 경우,
바로 이 CASE나 IF 문을 사용할 수 있다.

📌 CASE WHEN THEN END – 조건 분기 문법

가장 기본적인 형태는 아래와 같다:

SELECT 
  name,
  gender,
  CASE 
    WHEN gender = 'M' THEN '남자'
    WHEN gender = 'F' THEN '여자'
    ELSE '기타'
  END AS gender_label
FROM users;
  • 성별 코드에 따라 문자로 변환된 결과를 반환함
  • ELSE 구문을 통해 예외 처리도 가능

CASE 문은 SQL의 if/else 문과 동일한 기능을 하며,
MySQL에서 가장 널리 쓰이는 조건 분기 방식이다.

반응형

🧪 실전 예제 1 – 점수에 따른 등급 분류

SELECT 
  student_name,
  score,
  CASE 
    WHEN score >= 90 THEN 'A'
    WHEN score >= 80 THEN 'B'
    WHEN score >= 70 THEN 'C'
    ELSE 'F'
  END AS grade
FROM students;

이런 방식은 학교 성적 처리, 고객 등급 분류, 매출 구간 처리 등에 매우 유용하다.

✅ IF(expr, true_value, false_value) – 간단한 2분기

간단한 조건 하나만 분기할 땐 IF() 함수도 사용할 수 있다.

SELECT 
  name,
  age,
  IF(age >= 18, '성인', '미성년자') AS status
FROM users;
  • 나이가 18세 이상이면 '성인', 아니면 '미성년자' 출력
  • IF()는 단순 조건문에 적합하다 (복잡한 다중 분기에는 부적절)

🧪 실전 예제 2 – 회원 상태 변환

SELECT 
  user_id,
  login_attempts,
  IF(login_attempts > 5, '잠김', '정상') AS 계정상태
FROM members;
  • 로그인 실패 횟수를 기반으로 계정 상태 분기
반응형

✅ CASE와 IF의 차이

구분 CASE IF
분기 수 다중 조건 가능 단일 조건만 처리
가독성 복잡한 로직에 적합 짧고 단순한 조건에 적합
ANSI SQL 표준 SQL MySQL 전용 함수
 

복잡한 로직이나 여러 조건이 필요한 경우에는 CASE 문을,
단순한 TRUE/FALSE 분기는 IF 함수를 사용하면 된다.

✅ SELECT + 조건 분기 + GROUP BY 활용

SELECT 
  department,
  COUNT(*) AS 인원수,
  SUM(CASE WHEN gender = 'M' THEN 1 ELSE 0 END) AS 남자수,
  SUM(CASE WHEN gender = 'F' THEN 1 ELSE 0 END) AS 여자수
FROM employees
GROUP BY department;
  • 부서별 인원수, 남자수, 여자수를 집계하는 실전 예제
  • CASE와 집계 함수의 조합은 보고서 자동화에 매우 강력함

⚠️ 주의할 점

  • CASE 문 안에서 =, LIKE, IS NULL 등 다양한 조건 사용 가능
  • 문자열이나 숫자 모두 조건값으로 비교 가능
  • NULL값은 주의해서 비교할 것 (NULL은 일반 비교 연산 안 됨)

📎 공식 문서 참고

반응형