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

MySQL에서 SELECT 문으로 다른 테이블의 값을 테이블에 삽입하는 방법

MySQL에서 한 테이블의 데이터를 조회(SELECT)하여 다른 테이블에 삽입(INSERT)하려면 INSERT INTO ... SELECT 문을 사용하면 됩니다. 이 문법은 기존 테이블에서 조건에 맞는 레코드를 선택해 새로운 테이블에 그대로 복사할 때 매우 유용합니다.

1. 첫 번째 테이블 생성하기

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

mysql> create table DemoTable1
-> (
-> Id int,
-> Name varchar(20),
-> Age int
-> );
Query OK, 0 rows affected (1.72 sec)

2. 첫 번째 테이블에 데이터 삽입하기

INSERT 명령을 사용하여 DemoTable1에 여러 개의 레코드를 추가합니다.

mysql> insert into DemoTable1 values(100,'Chris',24);
Query OK, 1 row affected (0.61 sec)
mysql> insert into DemoTable1 values(101,'Adam',23);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1 values(102,'John',25);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1 values(103,'Carol',26);
Query OK, 1 row affected (0.26 sec)

3. 저장된 데이터 확인하기

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

mysql> select * from DemoTable1;

위 쿼리는 다음과 같은 결과를 출력합니다.

+------+-------+------+
| Id | Name | Age |
+------+-------+------+
| 100 | Chris | 24 |
| 101 | Adam | 23 |
| 102 | John | 25 |
| 103 | Carol | 26 |
+------+-------+------+
4 rows in set (0.00 sec)

4. 두 번째 테이블 생성하기

이번에는 데이터를 복사해 넣을 두 번째 테이블을 생성합니다. 컬럼 이름은 첫 번째 테이블과 달라도 되며, 데이터 타입만 호환되면 됩니다.

mysql> create table DemoTable2
-> (
-> EmployeeId int,
-> EmployeeFirstName varchar(20),
-> EmployeeAge int
-> );
Query OK, 0 rows affected (1.63 sec)

5. INSERT INTO SELECT로 값 복사하기

이제 핵심 단계입니다. DemoTable1에서 SELECT한 결과를 DemoTable2에 삽입하는 쿼리입니다. WHERE 절을 사용하면 원하는 조건의 레코드만 선택적으로 복사할 수 있습니다.

mysql> insert into DemoTable2(EmployeeId,EmployeeFirstName,EmployeeAge) select Id,Name,Age from DemoTable1 where Id=101;
Query OK, 1 row affected (0.17 sec)
Records: 1 Duplicates: 0 Warnings: 0

위 쿼리는 DemoTable1에서 Id가 101인 레코드를 찾아, 해당 레코드의 Id, Name, Age 값을 각각 DemoTable2의 EmployeeId, EmployeeFirstName, EmployeeAge 컬럼에 삽입합니다.

6. 결과 확인하기

DemoTable2의 레코드를 조회하여 데이터가 정상적으로 복사되었는지 확인합니다.

mysql> select * from DemoTable2;

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

+------------+-------------------+-------------+
| EmployeeId | EmployeeFirstName | EmployeeAge |
+------------+-------------------+-------------+
| 101 | Adam | 23 |
+------------+-------------------+-------------+
1 row in set (0.00 sec)

정리

INSERT INTO ... SELECT 문은 WHERE 절 없이 사용하면 전체 레코드를 복사하고, WHERE 절과 함께 사용하면 특정 조건에 맞는 레코드만 복사할 수 있습니다. 또한 대상 테이블의 컬럼 순서와 SELECT 절의 컬럼 순서만 일치시키면 서로 다른 컬럼 이름을 가진 테이블 간에도 손쉽게 데이터를 이동할 수 있습니다.