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

MySQL에서 여러 테이블의 데이터를 한 번에 삽입하는 방법 (INSERT INTO SELECT)

여러 개의 테이블에 저장된 레코드를 하나의 테이블로 가져오려면 INSERT INTO SELECT 문을 사용하면 됩니다. 이 글에서는 두 개의 테이블에 있는 데이터를 세 번째 테이블로 삽입하는 과정을 단계별로 살펴보겠습니다.

1단계: 첫 번째 테이블 생성 및 데이터 입력

먼저 이름(Name)을 저장할 첫 번째 테이블을 생성합니다.

mysql> create table DemoTable1943
    (
    Name varchar(20)
    );
Query OK, 0 rows affected (0.00 sec)

insert 명령으로 레코드를 입력합니다.

mysql> insert into DemoTable1943 values('Chris');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1943 values('Robert');
Query OK, 1 row affected (0.00 sec)

select 문으로 전체 레코드를 확인해 보겠습니다.

mysql> select * from DemoTable1943;

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

+--------+
| Name   |
+--------+
| Chris  |
| Robert |
+--------+
2 rows in set (0.00 sec)

2단계: 두 번째 테이블 생성 및 데이터 입력

다음으로 나이(Age)를 저장할 두 번째 테이블을 생성합니다.

mysql> create table DemoTable1944
    (
    Age int
    );
Query OK, 0 rows affected (0.00 sec)

마찬가지로 insert 명령으로 레코드를 입력합니다.

mysql> insert into DemoTable1944 values(23);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1944 values(26);
Query OK, 1 row affected (0.00 sec)

select 문으로 전체 레코드를 확인합니다.

mysql> select * from DemoTable1944;

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

+------+
| Age  |
+------+
|   23 |
|   26 |
+------+
2 rows in set (0.00 sec)

3단계: 데이터를 삽입할 대상 테이블 생성

이제 이름과 나이를 함께 저장할 세 번째 테이블을 생성합니다.

mysql> create table DemoTable1945
    (
    StudentName varchar(20),
    StudentAge int
    );
Query OK, 0 rows affected (0.00 sec)

4단계: 여러 테이블에서 데이터 삽입하기

핵심은 INSERT INTO SELECT 문입니다. FROM 절에서 두 테이블에 별칭(alias)을 지정하고, 각 테이블의 컬럼 값을 조합하여 대상 테이블에 삽입합니다.

mysql> insert into DemoTable1945(StudentName,StudentAge) select tbl1.Name,tbl2.Age from DemoTable1943 tbl1,DemoTable1944 tbl2;
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

select 문으로 최종 결과를 확인해 보겠습니다.

mysql> select * from DemoTable1945;

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

+-------------+------------+
| StudentName | StudentAge |
+-------------+------------+
| Chris       |         23 |
| Robert      |         23 |
| Chris       |         26 |
| Robert      |         26 |
+-------------+------------+
4 rows in set (0.00 sec)

동작 원리 정리

위 쿼리는 두 테이블을 카티션 곱(Cartesian Product) 방식으로 결합합니다. 첫 번째 테이블의 2개 레코드와 두 번째 테이블의 2개 레코드가 모든 조합으로 매칭되어 총 4개(2 × 2)의 레코드가 삽입된 것을 확인할 수 있습니다.

만약 특정 조건에 맞는 데이터만 삽입하고 싶다면 WHERE 절을 추가하여 조인 조건이나 필터를 지정할 수 있습니다. 이처럼 INSERT INTO SELECT 문을 활용하면 여러 테이블의 데이터를 손쉽게 하나의 테이블로 통합할 수 있습니다.