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

MySQL 단일 쿼리로 조건별 다른 ID 설정하는 방법 – CASE 문 활용 가이드

MySQL에서는 CASE 문을 활용하면 하나의 UPDATE 쿼리만으로 조건에 따라 각 레코드에 서로 다른 값을 설정할 수 있습니다. 이 글에서는 이름(FirstName) 값에 따라 ID를 다르게 변경하는 실제 예제를 단계별로 살펴보겠습니다.

1. 예제 테이블 생성

먼저 실습에 사용할 테이블을 생성합니다. Id와 FirstName 두 개의 컬럼으로 구성된 간단한 테이블입니다.

mysql> create table DemoTable1545
    -> (
    -> Id int,
    -> FirstName varchar(20)
    -> );
Query OK, 0 rows affected (1.65 sec)

2. 샘플 데이터 삽입

INSERT 명령을 사용해 세 개의 레코드를 추가합니다.

mysql> insert into DemoTable1545 values(1,'John');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1545 values(2,'Chris');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1545 values(3,'Bob');
Query OK, 1 row affected (0.15 sec)

3. 현재 데이터 확인

SELECT 문으로 테이블의 전체 레코드를 조회합니다.

mysql> select * from DemoTable1545;

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

+------+-----------+
| Id   | FirstName |
+------+-----------+
|    1 | John      |
|    2 | Chris     |
|    3 | Bob       |
+------+-----------+
3 rows in set (0.00 sec)

4. CASE 문으로 조건별 ID 일괄 변경

이제 핵심인 UPDATE 쿼리입니다. CASE 문 안에서 LIKE 연산자로 이름을 판별하고, 조건에 맞는 새로운 ID를 할당합니다. 어떤 조건에도 해당하지 않는 경우에는 else Id를 통해 기존 ID 값을 그대로 유지합니다.

mysql> update DemoTable1545
    -> set Id=
    -> case when FirstName like '%John%' then 101
    -> when FirstName like '%Chris%' then 201
    -> when FirstName like '%Bob%' then 501
    -> else Id
    -> end;
Query OK, 3 rows affected (0.18 sec)
Rows matched: 3  Changed: 3 Warnings: 0

5. 변경 결과 확인

업데이트 후 테이블을 다시 조회하여 결과를 확인합니다.

mysql> select * from DemoTable1545;

각 이름에 따라 ID가 의도한 대로 변경된 것을 볼 수 있습니다.

+------+-----------+
| Id   | FirstName |
+------+-----------+
|  101 | John      |
|  201 | Chris     |
|  501 | Bob       |
+------+-----------+
3 rows in set (0.00 sec)

정리

이처럼 MySQL의 CASE 문을 UPDATE 구문과 함께 사용하면, 여러 개의 개별 쿼리를 실행하지 않고도 단일 쿼리로 조건 기반의 대량 데이터 수정을 처리할 수 있습니다. 특히 else 절에 기존 컬럼 값을 지정하면 조건에 맞지 않는 레코드는 원래 값이 유지되므로, 의도치 않은 데이터 손실을 방지할 수 있다는 점도 기억해 두면 좋습니다.