반응형
MySQL에서 UPDATE 문은 단순한 값 변경뿐 아니라 조건에 따라 다른 값을 지정하는 동적 처리도 가능하다.
이를 가능하게 해주는 핵심 키워드가 바로 IF() 함수와 CASE 문이다.
이 기능을 활용하면 복잡한 조건 분기, 상태 변경, 점수 계산 등을 한 번의 쿼리로 처리할 수 있어 실무 생산성을 크게 높일 수 있다.

✅ UPDATE + IF 함수 기본 문법
IF(조건, 참일 때 값, 거짓일 때 값) 형태로 조건에 따라 결과를 다르게 지정할 수 있다.
UPDATE 테이블명
SET 컬럼명 = IF(조건, 값1, 값2)
WHERE 조건;
예제: 로그인 일자 기준 상태 변경
UPDATE users
SET status = IF(last_login >= CURDATE() - INTERVAL 30 DAY, '활성', '비활성');
최근 30일 이내 로그인한 사용자는 '활성', 그렇지 않은 사용자는 '비활성'으로 처리한다.
단순한 조건 처리에는 IF 함수가 간결하고 직관적이다.
반응형
✅ UPDATE + CASE 문 기본 문법
CASE 문은 다양한 조건을 계층적으로 처리해야 할 때 매우 유용하다.
UPDATE 테이블명
SET 컬럼명 = CASE
WHEN 조건1 THEN 값1
WHEN 조건2 THEN 값2
ELSE 기본값
END
WHERE 조건;
예제: 구매 금액 기준 등급 조정
UPDATE customers
SET grade = CASE
WHEN total_spent >= 100000 THEN 'VIP'
WHEN total_spent >= 50000 THEN 'GOLD'
WHEN total_spent >= 10000 THEN 'SILVER'
ELSE 'BRONZE'
END;
조건을 순차적으로 평가하여, 가장 먼저 일치하는 조건의 값으로 업데이트된다.
CASE 문은 3단계 이상 조건 분기가 필요한 경우 가장 깔끔한 해결책이다.
✅ 다중 컬럼에 IF / CASE 함께 적용
UPDATE orders
SET status = CASE
WHEN delivery_date IS NULL THEN '배송대기'
ELSE '배송완료'
END,
delivery_delay = IF(DATEDIFF(NOW(), order_date) > 7, 1, 0);
하나는 CASE, 하나는 IF()로 컬럼 두 개를 동시에 수정하는 예제이다.
각 컬럼의 조건 구조에 따라 적절한 키워드를 섞어 쓸 수 있다.
✅ JOIN과 함께 사용하는 조건부 UPDATE
UPDATE employees e
JOIN departments d ON e.dept_id = d.id
SET e.salary_grade = CASE
WHEN d.name = '영업' THEN 'A'
WHEN d.name = '기획' THEN 'B'
ELSE 'C'
END
WHERE e.status = '재직';
JOIN을 통해 외부 테이블 값을 기준으로 조건 분기를 적용한 예제이다.
조직별, 제품별, 지역별 조건 분기에 자주 쓰이는 방식이다.
반응형
✅ 서브쿼리와 함께 사용하는 조건 CASE
UPDATE members
SET level = CASE
WHEN (SELECT COUNT(*) FROM orders WHERE user_id = members.id) >= 10 THEN 'VIP'
ELSE '일반'
END;
서브쿼리를 조건으로 활용하여, 집계값 기준으로 분기 처리하는 고급 예제이다.
CASE와 서브쿼리를 함께 쓰면 매우 유연한 로직 구현이 가능하다.
✅ 상태값 업데이트 IF / CASE 예제 모음
IF 예제: 가입일 기준 상태 부여
UPDATE users
SET status = IF(join_date < '2024-01-01', '구회원', '신회원');
CASE 예제: 포인트 구간별 등급 지정
UPDATE users
SET point_grade = CASE
WHEN point >= 10000 THEN '플래티넘'
WHEN point >= 5000 THEN '골드'
WHEN point >= 1000 THEN '실버'
ELSE '브론즈'
END;
CASE + IF 복합 예제
UPDATE sales
SET bonus = CASE
WHEN region = '서울' THEN IF(sales_amount > 1000000, 100000, 50000)
WHEN region = '부산' THEN IF(sales_amount > 800000, 80000, 40000)
ELSE 30000
END;
지역과 매출액에 따라 보너스를 다르게 설정하는 예제이다.
복잡한 로직도 CASE 안에 IF를 포함시켜 깔끔하게 처리할 수 있다.
반응형
✅ UPDATE IF / CASE 사용 시 주의사항
| 항목 | 설명 |
| 조건은 반드시 참/거짓 판단 가능해야 함 | NULL 비교시 의도치 않은 결과 발생 가능 |
| WHEN 순서 주의 | 첫 번째 조건부터 평가되므로, 순서를 잘 조정해야 함 |
| 연산 결과값이 NULL일 수 있음 | ELSE 처리로 기본값 지정이 바람직함 |
| SELECT로 테스트 후 UPDATE 적용 | 데이터 손실 방지를 위해 사전 검증 필수 |
✅ 공식 문서 참고 링크
반응형
'DB' 카테고리의 다른 글
| [MySQL] UPDATE 실패 원인과 해결법 완전 정복 – 수정이 안될 때 확인할 모든 것 (2) | 2025.07.01 |
|---|---|
| [MySQL] UPDATE 트랜잭션 적용하기: 데이터 무결성을 지키는 안전한 수정 전략 (1) | 2025.07.01 |
| [MySQL] UPDATE 문에서 NULL 처리하는 방법 완전 정리 (0) | 2025.07.01 |
| [MySQL] UPDATE + NOW() 함수로 날짜 자동 수정하는 실전 활용법 (0) | 2025.06.30 |
| [MySQL] UPDATE + 서브쿼리 완전 정복 – 조건 기반 동적 수정의 핵심 기술 (0) | 2025.06.30 |
| [MySQL] UPDATE + JOIN 활용법 완전 정리 – 다중 테이블을 수정하는 강력한 방법 (0) | 2025.06.30 |
| [MySQL] UPDATE + WHERE (안전하고 정확한 데이터 수정 가이드) (0) | 2025.06.30 |
| [MySQL] UPDATE로 다중 컬럼 동시에 수정하는 방법 완벽 정리 (0) | 2025.06.30 |