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

MySQL에서 조건에 따라 레코드 값을 변경하는 방법 (CASE 문 활용)

MySQL에서 조건에 따라 레코드 값 변경하기

MySQL에서 특정 조건에 맞는 레코드의 값을 일괄적으로 변경하려면 CASE 문을 활용하면 됩니다. UPDATE 문과 함께 CASE 문을 사용하면 각 행의 현재 값에 따라 서로 다른 값으로 유연하게 수정할 수 있습니다. 아래 예제를 통해 단계별로 살펴보겠습니다.

1. 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable1481
    -> (
    -> PlayerScore int
    -> );
Query OK, 0 rows affected (0.42 sec)

2. 데이터 삽입

INSERT 문을 사용하여 테이블에 레코드를 삽입합니다.

mysql> insert into DemoTable1481 values(454);
Query OK, 1 row affected (0.41 sec)
mysql> insert into DemoTable1481 values(765);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1481 values(890);
Query OK, 1 row affected (0.09 sec)

3. 전체 레코드 조회

SELECT 문으로 테이블의 모든 레코드를 확인합니다.

mysql> select * from DemoTable1481;

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

+-------------+
| PlayerScore |
+-------------+
|        454 |
|        765 |
|        890 |
+-------------+
3 rows in set (0.00 sec)

4. CASE 문으로 조건부 업데이트 실행

다음은 조건에 따라 레코드 값을 변경하는 핵심 쿼리입니다. PlayerScore가 454이면 1256으로, 765이면 1865로, 890이면 3990으로 각각 변경됩니다.

mysql> update DemoTable1481
    -> set PlayerScore= case when PlayerScore=454 then 1256
    -> when PlayerScore=765 then 1865
    -> when PlayerScore=890 then 3990
    -> end
    -> ;
Query OK, 3 rows affected (0.17 sec)
Rows matched: 3  Changed: 3 Warnings: 0

5. 변경 결과 확인

업데이트 후 테이블의 레코드를 다시 한번 확인해 보겠습니다.

mysql> select * from DemoTable1481;

모든 점수가 조건에 맞게 정상적으로 변경된 것을 확인할 수 있습니다.

+-------------+
| PlayerScore |
+-------------+
|       1256 |
|       1865 |
|       3990 |
+-------------+
3 rows in set (0.00 sec)

마무리 및 참고 사항

이처럼 MySQL의 UPDATE 문 안에서 CASE 문을 사용하면, 조건마다 개별적인 UPDATE 쿼리를 여러 번 실행하지 않고도 단 하나의 쿼리로 조건별 값을 손쉽게 변경할 수 있습니다. 다만 조건에 해당하지 않는 레코드는 기본적으로 NULL로 설정되므로, WHERE 절로 대상 범위를 제한하거나 ELSE 절을 추가해 기본값을 지정해 주는 것이 안전합니다.