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

MySQL에서 두 열(Column) 간의 데이터를 교환하는 방법

MySQL에서 두 열 사이의 데이터를 서로 맞바꾸려면 사용자 정의 변수(user-defined variable) 개념을 활용하면 됩니다. 이 글에서는 예제 테이블을 만들고, Name1 열과 Name2 열의 값을 실제로 교환하는 과정을 단계별로 살펴보겠습니다.

1. 예제 테이블 생성

먼저 두 개의 문자열 열을 가진 테이블을 생성합니다.

mysql> create table DemoTable
-> (
-> Name1 varchar(100),
-> Name2 varchar(100)
-> );
Query OK, 0 rows affected (0.58 sec)

2. 샘플 데이터 삽입

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

mysql> insert into DemoTable values('John Smith','Chris Brown');
Query OK, 1 row affected (0.10 sec)

mysql> insert into DemoTable values('David Miller','Jone Doe');
Query OK, 1 row affected (0.16 sec)

3. 현재 데이터 확인

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

mysql> select *from DemoTable;

출력 결과

+--------------+-------------+
| Name1 | Name2 |
+--------------+-------------+
| John Smith | Chris Brown |
| David Miller | Jone Doe |
+--------------+-------------+
2 rows in set (0.00 sec)

4. 두 열의 데이터 교환하기

다음은 변수를 활용해 두 열의 값을 서로 바꾸는 UPDATE 쿼리입니다.

mysql> update DemoTable
-> SET Name1=(@tmpName:=Name1), Name1 = Name2, Name2 = @tmpName;
Query OK, 2 rows affected (0.13 sec)
Rows matched: 2 Changed: 2 Warnings: 0

이 쿼리의 동작 원리는 다음과 같습니다.

  • @tmpName:=Name1 : Name1의 기존 값을 임시 변수 @tmpName에 저장합니다.
  • Name1 = Name2 : Name1에 Name2의 값을 할당합니다.
  • Name2 = @tmpName : 저장해 둔 원래 Name1의 값을 Name2에 할당합니다.

5. 교환 결과 확인

다시 한번 테이블을 조회하여 값이 제대로 바뀌었는지 확인해 보겠습니다.

mysql> select *from DemoTable;

출력 결과

+-------------+--------------+
| Name1 | Name2 |
+-------------+--------------+
| Chris Brown | John Smith |
| Jone Doe | David Miller |
+-------------+--------------+
2 rows in set (0.00 sec)

Name1과 Name2의 값이 성공적으로 교환된 것을 확인할 수 있습니다.

참고: 더 간단한 방법

MySQL은 UPDATE 문의 SET 절을 왼쪽에서 오른쪽 순서로 평가하기 때문에, 별도의 변수 없이 아래와 같이 간단히 작성해도 두 열의 값이 교환됩니다.

mysql> update DemoTable
-> SET Name1 = Name2, Name2 = Name1;

다만 이 동작은 MySQL 고유의 특성이며, 표준 SQL을 따르는 다른 데이터베이스에서는 결과가 달라질 수 있으므로 주의가 필요합니다. 호환성을 고려한다면 앞서 소개한 변수를 사용하는 방식이 더 안전합니다.