Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL UPDATE 쿼리에서 CASE 문을 활용하는 방법

MySQL UPDATE 쿼리에서 CASE 문 사용하기

UPDATE 쿼리를 실행할 때 조건에 따라 서로 다른 값을 적용해야 하는 경우가 자주 있습니다. 이럴 때 CASE 문을 함께 사용하면 하나의 쿼리로 여러 조건 분기를 처리할 수 있어 매우 유용합니다.

예를 들어, 점수 범위에 따라 다른 방식으로 값을 갱신하는 상황을 생각해 볼 수 있습니다. 이번 글에서는 실제 예제를 통해 UPDATE 쿼리와 CASE 문을 결합하는 방법을 단계별로 살펴보겠습니다.

1단계: 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다. UserId는 자동 증가되는 기본 키로, UserScore는 사용자 점수를 저장하는 컬럼입니다.

mysql> create table DemoTable
    (
    UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY, UserScore int
    );
Query OK, 0 rows affected (0.29 sec)

2단계: 샘플 데이터 삽입

INSERT 명령을 사용해 테이블에 테스트용 레코드를 추가합니다.

mysql> insert into DemoTable(UserScore) values(100);
Query OK, 1 row affected (0.22 sec)

mysql> insert into DemoTable(UserScore) values(110);
Query OK, 1 row affected (0.07 sec)

mysql> insert into DemoTable(UserScore) values(120);
Query OK, 1 row affected (0.08 sec)

mysql> insert into DemoTable(UserScore) values(200);
Query OK, 1 row affected (0.05 sec)

mysql> insert into DemoTable(UserScore) values(230);
Query OK, 1 row affected (0.12 sec)

mysql> insert into DemoTable(UserScore) values(250);
Query OK, 1 row affected (0.03 sec)

mysql> insert into DemoTable(UserScore) values(270);
Query OK, 1 row affected (0.06 sec)

3단계: 데이터 확인

SELECT 문으로 테이블의 전체 레코드를 조회해 정상적으로 입력되었는지 확인합니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+--------+-----------+
| UserId | UserScore |
+--------+-----------+
|      1 |       100 |
|      2 |       110 |
|      3 |       120 |
|      4 |       200 |
|      5 |       230 |
|      6 |       250 |
|      7 |       270 |
+--------+-----------+
7 rows in set (0.00 sec)

4단계: UPDATE 쿼리에 CASE 문 적용

이제 핵심인 UPDATE 쿼리에 CASE 문을 적용해 보겠습니다. 점수 범위별로 갱신 규칙을 다르게 지정했습니다.

  • 100~120점: 점수에 5를 더합니다.
  • 130~230점: 점수에 10을 더합니다.
  • 250점 이상: 점수에 5를 곱합니다.
  • 그 외: 기존 값을 그대로 유지합니다.
mysql> update DemoTable
   set UserScore =
   CASE
      WHEN UserScore BETWEEN 100 AND 120
         THEN UserScore + 5
      WHEN UserScore BETWEEN 130 AND 230
         THEN UserScore +10
      WHEN UserScore >=250
         THEN UserScore * 5
      ELSE UserScore
   END;
Query OK, 7 rows affected (0.06 sec)
Rows matched: 7 Changed: 7 Warnings: 0

5단계: 업데이트 결과 확인

업데이트가 완료된 후 다시 전체 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

조건에 따라 값이 올바르게 변경된 것을 확인할 수 있습니다.

+--------+-----------+
| UserId | UserScore |
+--------+-----------+
|      1 |       105 |
|      2 |       115 |
|      3 |       125 |
|      4 |       210 |
|      5 |       240 |
|      6 |      1250 |
|      7 |      1350 |
+--------+-----------+
7 rows in set (0.00 sec)

정리

UPDATE 문에서 SET 절에 CASE 문을 사용하면 WHERE 절로 쿼리를 여러 번 나누어 실행하지 않고도, 단 한 번의 쿼리로 조건별 갱신 로직을 깔끔하게 처리할 수 있습니다. 특히 대량의 데이터를 범위 조건에 따라 일괄 수정해야 할 때 성능과 가독성 면에서 큰 이점을 얻을 수 있습니다. ELSE 절을 반드시 작성해 조건에 해당하지 않는 행의 값이 의도치 않게 NULL로 변경되지 않도록 주의하는 것도 중요한 팁입니다.