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

MySQL에서 SELECT 문으로 중첩 INSERT 구현하기 (INSERT INTO ... SELECT)

네, MySQL에서는 INSERT INTO ... SELECT 구문을 사용하여 SELECT 쿼리 결과를 다른 테이블에 바로 삽입하는 중첩 INSERT를 구현할 수 있습니다.

기본 문법

INSERT INTO 테이블명2(컬럼1, 컬럼2, .....N)
SELECT 컬럼1, 컬럼2, ....N FROM 테이블명1 WHERE 조건;

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

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

mysql> CREATE TABLE DemoTable1
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Name varchar(40)
);
Query OK, 0 rows affected (0.88 sec)

2단계: 첫 번째 테이블에 데이터 삽입

mysql> INSERT INTO DemoTable1(Name) VALUES('Chris');
Query OK, 1 row affected (0.14 sec)

mysql> INSERT INTO DemoTable1(Name) VALUES('David');
Query OK, 1 row affected (0.11 sec)

mysql> INSERT INTO DemoTable1(Name) VALUES('Bob');
Query OK, 1 row affected (0.12 sec)

3단계: 데이터 확인

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

mysql> SELECT * FROM DemoTable1;

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

+----+-------+
| Id | Name  |
+----+-------+
|  1 | Chris |
|  2 | David |
|  3 | Bob   |
+----+-------+
3 rows in set (0.00 sec)

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

mysql> CREATE TABLE DemoTable2
(
    ClientId int,
    ClientFirstName varchar(20)
);
Query OK, 0 rows affected (0.60 sec)

5단계: INSERT INTO ... SELECT로 중첩 삽입 실행

이제 SELECT 문을 활용해 DemoTable1의 데이터를 DemoTable2로 삽입합니다. 이때 WHERE 절을 사용해 특정 조건에 맞는 레코드만 선택할 수도 있습니다.

mysql> INSERT INTO DemoTable2(ClientId, ClientFirstName)
   SELECT Id, Name FROM DemoTable1 WHERE Id != 2;
Query OK, 2 rows affected (0.17 sec)
Records : 2  Duplicates: 0  Warnings : 0

6단계: 결과 확인

mysql> SELECT * FROM DemoTable2;

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

+----------+-----------------+
| ClientId | ClientFirstName |
+----------+-----------------+
|        1 | Chris           |
|        3 | Bob             |
+----------+-----------------+
2 rows in set (0.00 sec)

정리

위 예제에서 볼 수 있듯이, INSERT INTO ... SELECT 구문은 원본 테이블(DemoTable1)에서 Id가 2가 아닌 레코드만 골라 대상 테이블(DemoTable2)에 성공적으로 삽입했습니다. 이 방식은 테이블 간 데이터 복사, 백업 테이블 생성, 조건에 맞는 데이터 이관 등 다양한 상황에서 유용하게 활용할 수 있습니다.