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

CASE WHEN 문으로 MySQL 테이블의 두 열 값을 서로 교환하는 방법

MySQL에서 한 열(column) 안에 있는 두 개의 값을 서로 맞바꾸고 싶다면 CASE WHEN 문을 활용하는 것이 가장 간단하고 확실한 방법입니다. 이 글에서는 실제 예제를 통해 두 값을 교환하는 UPDATE 쿼리를 단계별로 살펴보겠습니다.

1. 테이블 생성하기

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

mysql> create table DemoTable1382
    -> (
    -> StudentName varchar(20)
    -> );
Query OK, 0 rows affected (0.57 sec)

2. 샘플 데이터 삽입하기

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

mysql> insert into DemoTable1382 values('John');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1382 values('Chris');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1382 values('Adam');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1382 values('Bob');
Query OK, 1 row affected (0.17 sec)

3. 현재 데이터 확인하기

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

mysql> select * from DemoTable1382;

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

+-------------+
| StudentName |
+-------------+
| John       |
| Chris      |
| Adam       |
| Bob        |
+-------------+
4 rows in set (0.00 sec)

4. CASE WHEN 문으로 두 값 교환하기

이제 CASE WHEN 문을 사용해 'John'과 'Chris'라는 두 값을 서로 교환하는 UPDATE 쿼리를 실행합니다.

mysql> update DemoTable1382
    ->  set StudentName=( case when StudentName="Chris" then "John"
    -> when StudentName="John" then "Chris"
    -> else
    -> StudentName
    -> end
    -> );
Query OK, 2 rows affected (0.19 sec)
Rows matched: 4  Changed: 2 Warnings: 0

쿼리 로직은 다음과 같습니다.

  • 값이 'Chris'인 행은 'John'으로 변경됩니다.
  • 값이 'John'인 행은 'Chris'로 변경됩니다.
  • 그 외의 값(Adam, Bob)은 else 절에 의해 원래 값 그대로 유지됩니다.

결과 메시지를 보면 전체 4개 행 중 조건에 해당하는 2개 행만 변경된 것을 확인할 수 있습니다.

5. 변경 결과 확인하기

테이블을 다시 조회해 두 값이 정상적으로 교환되었는지 확인합니다.

mysql> select * from DemoTable1382;

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

+-------------+
| StudentName |
+-------------+
| Chris      |
| John       |
| Adam       |
| Bob        |
+-------------+
4 rows in set (0.00 sec)

마무리

위 결과에서 볼 수 있듯이 'John'과 'Chris'의 위치가 성공적으로 서로 바뀌었고, 나머지 레코드는 그대로 유지되었습니다. 이처럼 CASE WHEN 문을 사용하면 임시 변수나 별도의 작업 없이 하나의 UPDATE 쿼리만으로 두 값을 안전하게 교환할 수 있습니다. 특히 조건에 해당하지 않는 데이터는 ELSE 절을 통해 원래 값이 보존되므로, 대량의 데이터에서 특정 값들만 선택적으로 교환해야 할 때 매우 유용한 기법입니다.