MySQL에서는 INNER JOIN을 활용하면 한 테이블의 값을 참조하여 다른 테이블을 손쉽게 업데이트할 수 있습니다. 이 글에서는 실제 예제를 통해 두 개의 테이블을 만들고, 조인 조건에 맞는 레코드를 업데이트하는 과정을 단계별로 살펴보겠습니다.
1. 첫 번째 테이블 생성
mysql> CREATE table tblFirst -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected (0.48 sec)
레코드 삽입
mysql> INSERT into tblFirst values(1,'John'); Query OK, 1 row affected (0.17 sec) mysql> INSERT into tblFirst values(2,'Bob'); Query OK, 1 row affected (0.26 sec) mysql> INSERT into tblFirst values(3,'David'); Query OK, 1 row affected (0.20 sec)
전체 레코드 조회
mysql> SELECT * from tblFirst;
실행 결과는 다음과 같습니다.
+------+-------+ | id | name | +------+-------+ | 1 | John | | 2 | Bob | | 3 | David | +------+-------+ 3 rows in set (0.00 sec)
2. 두 번째 테이블 생성
이번에는 자동 증가(AUTO_INCREMENT)되는 기본키 IncId를 가진 두 번째 테이블을 만들어 보겠습니다.
mysql> CREATE table UpdTable -> ( -> IncId int auto_increment, -> primary key(IncId), -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected (0.57 sec)
레코드 삽입
mysql> INSERT into UpdTable(id,name) values(1,'Taylor'); Query OK, 1 row affected (0.12 sec) mysql> INSERT into UpdTable(id,name) values(2,'jason'); Query OK, 1 row affected (0.24 sec) mysql> INSERT into UpdTable(id,name) values(3,'carol'); Query OK, 1 row affected (0.14 sec) mysql> INSERT into UpdTable(id,name) values(4,'john'); Query OK, 1 row affected (0.16 sec)
전체 레코드 조회
mysql> SELECT * from UpdTable;
실행 결과는 다음과 같습니다.
+-------+------+--------+ | IncId | id | name | +-------+------+--------+ | 1 | 1 | Taylor | | 2 | 2 | jason | | 3 | 3 | carol | | 4 | 4 | john | +-------+------+--------+ 4 rows in set (0.00 sec)
위 출력 결과를 보면 마지막 레코드의 이름인 'john'이 첫 번째 테이블(tblFirst)의 'John'과 일치합니다. 이제 두 테이블을 조인하여 UpdTable의 id 값을 tblFirst의 id 값으로 업데이트하는 쿼리를 작성해 보겠습니다.
3. JOIN을 활용한 UPDATE 쿼리 작성
mysql> UPDATE UpdTable -> inner join tblFirst ON (UpdTable.name = tblFirst.name) -> SET UpdTable.id = tblFirst.id; Query OK, 1 row affected (0.19 sec) Rows matched: 1 Changed: 1 Warnings: 0
이 쿼리는 두 테이블의 name 컬럼이 일치하는 레코드를 찾아, UpdTable의 id 값을 tblFirst의 id 값으로 변경합니다. MySQL은 기본적으로 대소문자를 구분하지 않는 정렬 규칙(collation)을 사용하므로 'john'과 'John'도 서로 매칭됩니다.
4. 업데이트 결과 확인
마지막 레코드가 다음과 같이 업데이트되었습니다. 아래 쿼리로 결과를 확인할 수 있습니다.
mysql> SELECT * from UpdTable;
실행 결과는 다음과 같습니다.
+-------+------+--------+ | IncId | id | name | +-------+------+--------+ | 1 | 1 | Taylor | | 2 | 2 | jason | | 3 | 3 | carol | | 4 | 1 | john | +-------+------+--------+ 4 rows in set (0.00 sec)
결과를 보면 네 번째 레코드의 id가 기존의 4에서 1로 변경된 것을 확인할 수 있습니다. 이처럼 UPDATE 문과 INNER JOIN을 함께 사용하면 다른 테이블의 값을 기준으로 특정 레코드를 효율적으로 수정할 수 있습니다.