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

MySQL에서 한 테이블의 데이터를 SELECT하여 다른 테이블에 INSERT하는 방법

MySQL에서는 INSERT ... SELECT 구문을 사용하면 한 테이블에서 특정 필드를 조회한 결과를 그대로 다른 테이블에 삽입할 수 있습니다. 조건(WHERE 절)을 함께 사용하면 원하는 행만 골라서 복사하는 것도 가능합니다.

아래 예제를 통해 실제 동작 과정을 단계별로 살펴보겠습니다.

1. 첫 번째 테이블 생성

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

mysql> create table DemoTable1
   -> (
   -> StudentId int,
   -> StudentName varchar(20)
   -> );
Query OK, 0 rows affected (0.64 sec)

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

INSERT 명령을 사용해 샘플 레코드를 추가합니다.

mysql> insert into DemoTable1 values(10,'John');
Query OK, 1 row affected (0.15 sec)

mysql> insert into DemoTable1 values(11,'Chris');
Query OK, 1 row affected (0.15 sec)

3. 저장된 데이터 확인

SELECT 문으로 테이블의 전체 레코드를 조회합니다.

mysql> select *from DemoTable1;

출력 결과

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 10        | John        |
| 11        | Chris       |
+-----------+-------------+
2 rows in set (0.00 sec)

4. 두 번째 테이블 생성

데이터를 삽입할 대상 테이블을 생성합니다. 이때 컬럼 이름과 크기가 달라도 데이터 타입이 호환되면 정상적으로 삽입됩니다.

mysql> create table DemoTable2
   -> (
   -> CustomerId int,
   -> CustomerName varchar(100)
   -> );
Query OK, 0 rows affected (0.82 sec)

5. SELECT 결과를 다른 테이블에 INSERT

핵심 쿼리입니다. DemoTable1에서 StudentId = 11인 학생의 데이터를 조회하여 DemoTable2의 CustomerId, CustomerName 컬럼에 삽입합니다.

mysql> insert into DemoTable2(CustomerId,CustomerName) select StudentId,StudentName from DemoTable1 where StudentId=11;
Query OK, 1 row affected (0.20 sec)
Records: 1 Duplicates: 0 Warnings: 0

위 쿼리의 구조를 살펴보면 다음과 같습니다.

  • INSERT INTO 대상테이블(컬럼1, 컬럼2) : 값을 넣을 테이블과 컬럼을 지정
  • SELECT 컬럼1, 컬럼2 FROM 원본테이블 : 복사할 데이터를 조회
  • WHERE 조건 : 특정 행만 선택적으로 삽입

6. 두 번째 테이블의 데이터 확인

DemoTable2를 다시 조회하면 WHERE 조건에 해당하는 레코드만 삽입된 것을 확인할 수 있습니다.

mysql> select *from DemoTable2;

출력 결과

+------------+--------------+
| CustomerId | CustomerName |
+------------+--------------+
| 11         | Chris        |
+------------+--------------+
1 row in set (0.00 sec)

정리

이처럼 INSERT INTO ... SELECT 구문을 활용하면 테이블 간 데이터 복사가 매우 간편해집니다. WHERE 절로 필요한 데이터만 선별하거나, WHERE 절을 생략하면 전체 레코드를 한 번에 옮길 수도 있습니다. 단, 양쪽 테이블의 컬럼 개수와 데이터 타입이 호환되어야 하므로 실행 전에 스키마를 확인하는 것이 좋습니다.