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

MySQL에서 테이블의 값을 대체하는 방법 – CASE 문 활용하기

MySQL에서 테이블의 값을 대체하는 방법

MySQL에서 테이블에 저장된 값을 서로 바꾸거나 대체하려면 CASE 문과 함께 UPDATE 문을 사용하면 됩니다. 개념을 쉽게 이해할 수 있도록 예제 테이블을 직접 만들어 단계별로 살펴보겠습니다.

1. 예제 테이블 생성

먼저 다음 쿼리를 실행하여 테이블을 생성합니다.

mysql> create table replaceValueDemo
    -> (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> Name varchar(10),
    -> isGreaterThan18 varchar(10)
    -> );
Query OK, 0 rows affected (0.49 sec)

2. 샘플 데이터 삽입

INSERT 명령을 사용해 테이블에 여러 레코드를 추가합니다. 여기서는 'YES', 'NO', 그리고 'DONOTKNOW'라는 세 가지 값을 의도적으로 섞어 넣었습니다.

mysql> insert into replaceValueDemo(Name,isGreaterThan18) values('John','YES');
Query OK, 1 row affected (0.24 sec)
mysql> insert into replaceValueDemo(Name,isGreaterThan18) values('Carol','NO');
Query OK, 1 row affected (0.16 sec)
mysql> insert into replaceValueDemo(Name,isGreaterThan18) values('Mike','YES');
Query OK, 1 row affected (0.20 sec)
mysql> insert into replaceValueDemo(Name,isGreaterThan18) values('Bob','YES');
Query OK, 1 row affected (0.17 sec)
mysql> insert into replaceValueDemo(Name,isGreaterThan18) values('Larry','NO');
Query OK, 1 row affected (0.09 sec)
mysql> insert into replaceValueDemo(Name,isGreaterThan18) values('David','NO');
Query OK, 1 row affected (0.11 sec)
mysql> insert into replaceValueDemo(Name,isGreaterThan18) values('James','DONOTKNOW');
Query OK, 1 row affected (0.14 sec)
mysql> insert into replaceValueDemo(Name,isGreaterThan18) values('Robert','DONOTKNOW');
Query OK, 1 row affected (0.13 sec)

3. 현재 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회해 봅니다.

mysql> select *from replaceValueDemo;

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

+----+--------+-----------------+
| Id | Name   | isGreaterThan18 |
+----+--------+-----------------+
| 1  | John   | YES            |
| 2  | Carol  | NO             |
| 3  | Mike   | YES            |
| 4  | Bob    | YES            |
| 5  | Larry  | NO             |
| 6  | David  | NO             |
| 7  | James  | DONOTKNOW      |
| 8  | Robert | DONOTKNOW      |
+----+--------+-----------------+
8 rows in set (0.00 sec)

4. CASE 문으로 값 대체하기

이제 'YES'는 'NO'로, 'NO'는 'YES'로 서로 바꾸는 업데이트 쿼리를 실행합니다. WHERE 절에 IN 조건을 넣어 'YES' 또는 'NO'인 행만 대상으로 제한하는 것이 핵심입니다. 이렇게 하면 'DONOTKNOW'처럼 변경 대상이 아닌 값은 그대로 유지됩니다.

mysql> update replaceValueDemo set isGreaterThan18=case when isGreaterThan18='YES' THEN 'NO' ELSE 'YES' END
   -> where isGreaterThan18 IN('YES','NO');
Query OK, 6 rows affected (0.19 sec)
Rows matched: 6 Changed: 6 Warnings: 0

5. 결과 확인

업데이트 후 테이블을 다시 조회하여 값이 올바르게 대체되었는지 확인합니다.

mysql> select *from replaceValueDemo;

값이 대체된 최종 결과는 다음과 같습니다.

+----+--------+-----------------+
| Id | Name   | isGreaterThan18 |
+----+--------+-----------------+
| 1  | John   | NO             |
| 2  | Carol  | YES            |
| 3  | Mike   | NO             |
| 4  | Bob    | NO             |
| 5  | Larry  | YES            |
| 6  | David  | YES            |
| 7  | James  | DONOTKNOW      |
| 8  | Robert | DONOTKNOW      |
+----+--------+-----------------+
8 rows in set (0.00 sec)

정리

이처럼 UPDATE 문 안에서 CASE 문을 사용하면 조건에 따라 기존 값을 다른 값으로 손쉽게 대체할 수 있습니다. 특히 WHERE 절과 IN 연산자를 함께 사용하면 특정 값만 선택적으로 변경하고 나머지 값은 보존할 수 있어, 실무에서 데이터 일괄 변환 작업 시 매우 유용하게 활용됩니다.