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

MySQL에서 두 열의 값을 서로 맞바꾸는 방법

MySQL에서 두 열의 값 교환하기

MySQL에서 두 열의 값을 서로 맞바꾸려면 별도의 임시 변수 없이도 간단한 산술 연산 로직으로 처리할 수 있습니다. 핵심 원리는 다음과 같습니다.

  • 두 열의 값을 더한 결과를 첫 번째 열에 저장합니다.
  • 첫 번째 열(업데이트된 값)에서 두 번째 열의 값을 뺀 결과를 두 번째 열에 저장합니다.
  • 업데이트된 두 번째 열의 값에서 첫 번째 열의 값을 빼고 그 결과를 첫 번째 열에 저장합니다.

이 규칙을 수식으로 표현하면 다음과 같습니다. 첫 번째 열을 a, 두 번째 열을 b라고 가정하겠습니다.

1. a = a + b;
2. b = a - b;
3. a = a - b;

이제 이 규칙을 실제 SQL 쿼리에 적용하여 두 열의 값을 교환해 보겠습니다.

1단계: 테스트용 테이블 생성

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

mysql> create table SwappingTwoColumnsValueDemo
-> (
-> FirstColumnValue int,
-> SecondColumnValue int
-> );
Query OK, 0 rows affected (0.49 sec)

2단계: 샘플 데이터 삽입

테이블에 몇 개의 레코드를 삽입합니다.

mysql> insert into SwappingTwoColumnsValueDemo values(10,20),(30,40),(50,60),(70,80),(90,100);
Query OK, 5 rows affected (0.19 sec)
Records: 5 Duplicates: 0 Warnings: 0

3단계: 교환 전 데이터 확인

값을 교환하기 전에 현재 열의 값을 확인합니다.

mysql> select *from SwappingTwoColumnsValueDemo;

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

+------------------+-------------------+
| FirstColumnValue | SecondColumnValue |
+------------------+-------------------+
| 10 | 20 |
| 30 | 40 |
| 50 | 60 |
| 70 | 80 |
| 90 | 100 |
+------------------+-------------------+
5 rows in set (0.00 sec)

4단계: UPDATE 문으로 열 값 교환

두 열의 값을 맞바꾸는 UPDATE 쿼리 구문은 다음과 같습니다. 주의할 점은 MySQL의 UPDATE 문이 SET 절의 할당을 왼쪽에서 오른쪽 순서대로 순차적으로 처리하기 때문에 위의 산술 로직이 정상적으로 동작한다는 것입니다.

mysql> UPDATE SwappingTwoColumnsValueDemo
-> SET FirstColumnValue = FirstColumnValue+SecondColumnValue,
-> SecondColumnValue = FirstColumnValue-SecondColumnValue,
-> FirstColumnValue = FirstColumnValue-SecondColumnValue;
Query OK, 5 rows affected (0.15 sec)
Rows matched: 5 Changed: 5 Warnings: 0

5단계: 교환 후 결과 확인

열의 값이 실제로 교환되었는지 다시 조회해 보겠습니다.

mysql> select *from SwappingTwoColumnsValueDemo;

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

+------------------+-------------------+
| FirstColumnValue | SecondColumnValue |
+------------------+-------------------+
| 20 | 10 |
| 40 | 30 |
| 60 | 50 |
| 80 | 70 |
| 100 | 90 |
+------------------+-------------------+
5 rows in set (0.00 sec)

출력 결과를 보면 FirstColumnValue와 SecondColumnValue의 값이 성공적으로 맞바뀐 것을 확인할 수 있습니다. 이처럼 덧셈과 뺄셈만 활용하면 임시 열이나 변수를 만들지 않고도 두 열의 값을 손쉽게 교환할 수 있습니다. 참고로 덧셈 연산 시 정수 오버플로가 발생할 가능성이 있는 매우 큰 숫자를 다룬다면, 세 번째 임시 열을 사용하는 방법이나 단순히 SET a = b, b = a;와 같이 한 문장 내 순차 할당 특성을 이용하는 방법도 고려해 보세요.