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

MySQL에서 열의 'a'와 'b' 값을 서로 교환(스왑)하는 방법 – CASE 문 활용하기

MySQL에서 특정 열에 저장된 'a' 값을 'b'로, 'b' 값을 'a'로 한 번에 바꾸고 싶다면 CASE 문을 사용하면 간단하게 해결할 수 있습니다. 이번 글에서는 예제 테이블을 만들고, UPDATE 쿼리와 CASE 문을 조합해 두 값을 손쉽게 스왑하는 과정을 단계별로 살펴보겠습니다.

1. 예제 테이블 생성

먼저 char(1) 타입의 Value 컬럼 하나만 가진 테이블을 생성합니다.

mysql> create table DemoTable
(
    Value char(1)
);
Query OK, 0 rows affected (1.21 sec)

2. 샘플 데이터 삽입

INSERT 명령어를 이용해 'a'와 'b' 값을 번갈아가며 입력합니다.

mysql> insert into DemoTable values('a');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('b');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('a');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('a');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('b');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('a');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('b');
Query OK, 1 row affected (0.13 sec)

3. 현재 데이터 확인

SELECT 문으로 테이블에 저장된 전체 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

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

+-------+
| Value |
+-------+
| a     |
| b     |
| a     |
| a     |
| b     |
| a     |
| b     |
+-------+
7 rows in set (0.00 sec)

4. CASE 문으로 'a' ↔ 'b' 값 스왑하기

이제 핵심인 UPDATE 쿼리입니다. CASE 문을 사용해 컬럼 값이 'a'이면 'b'로, 그 외의 경우('b')에는 'a'로 변경하도록 지정합니다.

mysql> update DemoTable set Value=case when Value='a' then 'b' else 'a' end;
Query OK, 7 rows affected (0.17 sec)
Rows matched: 7 Changed: 7 Warnings: 0

참고: 일반적으로 두 값을 맞바꿀 때는 임시 변수나 세 번째 값이 필요하지만, MySQL에서는 위처럼 CASE 문을 사용하면 단일 UPDATE 문으로도 안전하게 값을 교환할 수 있습니다. 이는 MySQL이 UPDATE 시 각 행의 기존 값을 먼저 읽은 후 새 값을 할당하기 때문입니다.

5. 변경 결과 확인

테이블을 다시 조회하면 모든 'a'는 'b'로, 'b'는 'a'로 바뀐 것을 확인할 수 있습니다.

mysql> select *from DemoTable;

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

+-------+
| Value |
+-------+
| b     |
| a     |
| b     |
| b     |
| a     |
| b     |
| a     |
+-------+
7 rows in set (0.00 sec)

마무리

이처럼 MySQL에서는 CASE 문과 UPDATE 쿼리를 함께 사용하면 별도의 임시 테이블이나 추가 작업 없이도 열의 두 값을 한 번에 교환할 수 있습니다. 상태 플래그(예: Y/N, 0/1)를 반전시켜야 하는 상황에서 특히 유용하게 활용할 수 있으니 참고해 보시기 바랍니다.