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

MySQL에서 한 테이블의 열 값을 일치하는 ID 기준으로 다른 테이블에 복사하는 방법

개요

MySQL에서는 두 개의 테이블에 공통된 ID 값이 있을 때, 다중 테이블 UPDATE 문을 사용하여 한 테이블의 열 값을 다른 테이블로 손쉽게 복사할 수 있습니다. 이 글에서는 실제 예제를 통해 PersonId와 StudentId처럼 서로 다른 이름의 ID 열을 기준으로 값을 복사하는 방법을 단계별로 살펴봅니다.

1단계: 첫 번째 테이블 생성

먼저 원본 데이터가 담길 테이블을 생성합니다.

mysql> create table DemoTable1
(
    PersonId int,
    Value int
);
Query OK, 0 rows affected (0.64 sec)

insert 명령을 사용하여 테이블에 레코드를 삽입합니다.

mysql> insert into DemoTable1 values(100,78);
Query OK, 1 row affected (0.46 sec)
mysql> insert into DemoTable1 values(101,67);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1 values(102,89);
Query OK, 1 row affected (0.19 sec)

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

mysql> select *from DemoTable1;

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

+----------+-------+
| PersonId | Value |
+----------+-------+
|      100 |    78 |
|      101 |    67 |
|      102 |    89 |
+----------+-------+
3 rows in set (0.00 sec)

2단계: 두 번째 테이블 생성

값을 복사받을 대상 테이블을 생성합니다.

mysql> create table DemoTable2
(
    StudentId int,
    StudentScore int
);
Query OK, 0 rows affected (0.57 sec)

이번에는 점수 열을 NULL로 남겨 둔 상태로 레코드를 삽입합니다.

mysql> insert into DemoTable2 values(100,NULL) ;
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable2 values(102,NULL);
Query OK, 1 row affected (0.22 sec)

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

mysql> select *from DemoTable2;

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

+-----------+--------------+
| StudentId | StudentScore |
+-----------+--------------+
|       100 |         NULL |
|       102 |         NULL |
+-----------+--------------+
2 rows in set (0.00 sec)

3단계: 일치하는 ID를 기준으로 열 값 복사하기

한 테이블의 열 값을 일치하는 ID를 기준으로 다른 테이블에 복사하는 쿼리는 다음과 같습니다. 핵심은 WHERE 절에서 두 테이블의 ID 열을 연결(조인 조건)하는 것입니다.

mysql> update DemoTable1, DemoTable2 set DemoTable2.StudentScore = DemoTable1.Value where DemoTable2.StudentId=DemoTable1.PersonId;
Query OK, 2 rows affected (0.13 sec)
Rows matched: 2 Changed: 2 Warnings: 0

위 쿼리는 MySQL의 다중 테이블 UPDATE 문법을 활용한 것으로, DemoTable2.StudentId와 DemoTable1.PersonId가 일치하는 행을 찾아 DemoTable1.Value 값을 DemoTable2.StudentScore에 대입합니다. 이 쿼리는 아래와 같이 INNER JOIN을 명시적으로 사용하는 방식과 동일하게 동작합니다.

update DemoTable2
inner join DemoTable1 on DemoTable2.StudentId = DemoTable1.PersonId
set DemoTable2.StudentScore = DemoTable1.Value;

결과 확인

업데이트 후 테이블의 레코드를 다시 조회해 보겠습니다.

mysql> select *from DemoTable2;

NULL이었던 StudentScore 열에 DemoTable1의 Value 값이 성공적으로 복사된 것을 확인할 수 있습니다.

+-----------+--------------+
| StudentId | StudentScore |
+-----------+--------------+
|       100 |           78 |
|       102 |           89 |
+-----------+--------------+
2 rows in set (0.00 sec)

정리

MySQL에서는 UPDATE 문에 여러 테이블을 나열하고 WHERE 절로 조인 조건을 지정하면, 한 테이블의 열 값을 일치하는 ID를 가진 다른 테이블의 행에 간편하게 복사할 수 있습니다. 참고로 이 방식은 내부적으로 INNER JOIN처럼 동작하므로, 조인 조건에 맞지 않는 대상 테이블의 행은 업데이트되지 않고 그대로 유지됩니다.