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

MySQL에서 임시 테이블 없이 열 데이터를 업데이트하는 방법

MySQL에서 테이블의 열 값을 일괄적으로 변경하려면 CASE 문을 활용할 수 있습니다. CASE 문은 조건에 따라 서로 다른 값을 반환하기 때문에, 임시 테이블을 만들지 않고도 기존 테이블의 데이터를 손쉽게 업데이트할 수 있습니다.

예제를 통해 단계별로 살펴보겠습니다.

1. 테이블 생성

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

mysql> create table DemoTable
   -> (
   -> UserName varchar(100),
   -> UserStatus varchar(100)
   -> );
Query OK, 0 rows affected (0.74 sec)

2. 레코드 삽입

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

mysql> insert into DemoTable values('John','Active');
Query OK, 1 row affected (0.29 sec)

mysql> insert into DemoTable values('Chris','Inactive');
Query OK, 1 row affected (0.19 sec)

mysql> insert into DemoTable values('Bob','Inactive');
Query OK, 1 row affected (0.32 sec)

mysql> insert into DemoTable values('Robert','Active');
Query OK, 1 row affected (0.15 sec)

3. 현재 데이터 확인

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

mysql> select *from DemoTable;

출력 결과

+----------+------------+
| UserName | UserStatus |
+----------+------------+
| John | Active |
| Chris | Inactive |
| Bob | Inactive |
| Robert | Active |
+----------+------------+
4 rows in set (0.00 sec)

4. CASE 문으로 열 데이터 업데이트

다음은 CASE 문을 사용하여 UserStatus 열의 값을 반전시키는 쿼리입니다. 'Inactive'인 값은 'Active'로, 그 외의 값은 모두 'Inactive'로 변경됩니다.

mysql> update DemoTable
   -> set UserStatus=CASE UserStatus WHEN 'Inactive' THEN 'Active' ELSE 'Inactive' END;
Query OK, 4 rows affected (0.28 sec)
Rows matched: 4 Changed: 4 Warnings: 0

5. 업데이트 결과 확인

테이블의 레코드를 다시 한번 조회해 변경된 내용을 확인합니다.

mysql> select *from DemoTable;

출력 결과

+----------+------------+
| UserName | UserStatus |
+----------+------------+
| John | Inactive |
| Chris | Active |
| Bob | Active |
| Robert | Inactive |
+----------+------------+
4 rows in set (0.00 sec)

출력 결과에서 볼 수 있듯이, 모든 사용자의 상태가 성공적으로 반전되었습니다. John과 Robert는 'Active'에서 'Inactive'로, Chris와 Bob은 'Inactive'에서 'Active'로 변경되었습니다.

이처럼 UPDATE 문 안에서 CASE 표현식을 사용하면 임시 테이블이나 복잡한 서브쿼리 없이도 조건별로 열 데이터를 유연하게 업데이트할 수 있습니다. 여러 조건 분기가 필요한 경우 WHEN 절을 여러 개 추가하면 되므로, 실무에서도 매우 유용하게 활용됩니다.