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

MySQL에서 다른 테이블의 데이터를 사용해 한 테이블 업데이트하는 방법

MySQL에서 다른 테이블의 데이터로 한 테이블 업데이트하기

MySQL에서 한 테이블의 데이터를 다른 테이블의 값을 기반으로 업데이트하려면 UPDATE 명령어와 JOIN을 함께 사용하면 됩니다. 이 방법은 두 테이블 간에 공통된 키(예: 이름, ID 등)가 있을 때 특히 유용합니다.

실제 예제를 통해 단계별로 살펴보겠습니다.

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

먼저 원본 데이터가 담긴 첫 번째 테이블을 생성합니다.

mysql> create table demo54
-> (
-> firstName varchar(20),
-> lastName varchar(20)
-> );
Query OK, 0 rows affected (0.57 sec)

insert 명령어를 사용해 테이블에 레코드를 삽입합니다.

mysql> insert into demo54 values('John','Smith');
Query OK, 1 row affected (0.09 sec)

mysql> insert into demo54 values('John','Smith');
Query OK, 1 row affected (0.09 sec)

mysql> insert into demo54 values('David','Smith');
Query OK, 1 row affected (0.11 sec)

select 문으로 테이블의 레코드를 확인합니다.

mysql> select *from demo54;

다음과 같은 결과가 출력됩니다.

+-----------+----------+
| firstName | lastName |
+-----------+----------+
| John | Smith |
| John | Smith |
| David | Smith |
+-----------+----------+
3 rows in set (0.00 sec)

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

이번에는 업데이트 대상이 될 두 번째 테이블을 생성합니다.

mysql> create table demo55
-> (
-> firstName varchar(20),
-> lastName varchar(20)
-> );
Query OK, 0 rows affected (1.93 sec)

두 번째 테이블에는 firstName 값만 삽입하고 lastName은 비워 둡니다.

mysql> insert into demo55 (firstName) values('John');
Query OK, 1 row affected (0.10 sec)

mysql> insert into demo55 (firstName) values('David');
Query OK, 1 row affected (0.13 sec)

mysql> insert into demo55 (firstName) values('Bob');
Query OK, 1 row affected (0.10 sec)

테이블 내용을 확인해 보면 lastName 컬럼이 모두 NULL인 것을 볼 수 있습니다.

mysql> select *from demo55;
+-----------+----------+
| firstName | lastName |
+-----------+----------+
| John | NULL |
| David | NULL |
| Bob | NULL |
+-----------+----------+
3 rows in set (0.00 sec)

3단계: JOIN을 활용한 UPDATE 쿼리 실행

다른 테이블의 데이터를 참조해 한 테이블을 업데이트하는 쿼리는 다음과 같습니다.

mysql> UPDATE demo55 tbl1
-> JOIN demo54 tbl2 ON tbl1.firstName = tbl2.firstName
-> SET tbl1.lastName = tbl2.lastName;
Query OK, 2 rows affected (0.10 sec)
Rows matched: 2 Changed: 2 Warnings: 0

이 쿼리의 동작 방식은 다음과 같습니다.

  • UPDATE demo55 tbl1: 업데이트할 대상 테이블(demo55)에 별칭 tbl1을 지정합니다.
  • JOIN demo54 tbl2 ON tbl1.firstName = tbl2.firstName: 두 테이블을 firstName 컬럼을 기준으로 조인합니다.
  • SET tbl1.lastName = tbl2.lastName: 조건이 일치하는 행의 lastName 값을 demo54 테이블의 값으로 갱신합니다.

4단계: 결과 확인

업데이트 후 테이블을 다시 조회해 보겠습니다.

mysql> select *from demo55;

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

+-----------+----------+
| firstName | lastName |
+-----------+----------+
| John | Smith |
| David | Smith |
| Bob | NULL |
+-----------+----------+
3 rows in set (0.00 sec)

결과를 보면 John과 David의 lastName이 demo54 테이블의 'Smith' 값으로 정상적으로 업데이트되었습니다. 반면 demo54 테이블에 일치하는 firstName이 없는 Bob의 lastName은 그대로 NULL로 유지됩니다.

정리

MySQL에서는 UPDATE ... JOIN ... SET 구문을 사용하면 다른 테이블의 데이터를 손쉽게 참조해 현재 테이블의 값을 갱신할 수 있습니다. 조인 조건에 일치하는 행만 업데이트되므로, 대량의 데이터를 일관성 있게 동기화할 때 매우 유용한 기법입니다.