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

MySQL에서 INSERT, SELECT 문을 결합하여 데이터 삽입하는 방법

MySQL에서 INSERT와 SELECT 문 결합하기

MySQL에서는 INSERT 문과 SELECT 문을 결합하여 한 테이블의 데이터를 다른 테이블로 손쉽게 복사할 수 있습니다. 이 방법은 VALUES 절에 값을 일일이 나열하는 대신, 기존 테이블에서 조회한 결과를 그대로 새 테이블에 삽입할 때 매우 유용합니다.

기본 문법은 다음과 같습니다.

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

위 문법을 실제로 이해하기 위해 두 개의 테이블을 만들어 보겠습니다. 첫 번째 테이블은 두 번째 테이블의 레코드를 받아오는 역할을 합니다.

1단계: 데이터를 받을 첫 번째 테이블 생성

먼저 레코드가 없는 빈 테이블을 생성합니다. 테이블 생성 쿼리는 다음과 같습니다.

mysql> create table CombiningInsertValuesSelect
    -> (
    -> EmployeeId varchar(10),
    -> EmployeeName varchar(100),
    -> EmployeeAge int
    -> );
Query OK, 0 rows affected (6.95 sec)

2단계: 원본 데이터가 있는 두 번째 테이블 생성

이제 실제 데이터를 담고 있을 두 번째 테이블을 생성합니다.

mysql> create table getAllValues
    -> (
    -> Id varchar(100),
    -> Name varchar(100),
    -> Age int
    -> );
Query OK, 0 rows affected (1.12 sec)

3단계: 두 번째 테이블에 레코드 삽입

'getAllValues' 테이블에 INSERT 명령어를 사용해 레코드를 추가합니다.

mysql> insert into getAllValues values('EMP-1','John',26);
Query OK, 1 row affected (0.86 sec)

mysql> insert into getAllValues values('EMP-2','Carol',22);
Query OK, 1 row affected (0.36 sec)

mysql> insert into getAllValues values('EMP-3','Sam',24);
Query OK, 1 row affected (0.28 sec)

mysql> insert into getAllValues values('EMP-4','David',27);
Query OK, 1 row affected (0.25 sec)

mysql> insert into getAllValues values('EMP-5','Bob',21);
Query OK, 1 row affected (0.75 sec)

4단계: 삽입된 데이터 확인

SELECT 문을 사용해 테이블의 모든 레코드를 조회합니다.

mysql> select *from getAllValues;

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

+-------+-------+------+
| Id    | Name  | Age  |
+-------+-------+------+
| EMP-1 | John  |   26 |
| EMP-2 | Carol |   22 |
| EMP-3 | Sam   |   24 |
| EMP-4 | David |   27 |
| EMP-5 | Bob   |   21 |
+-------+-------+------+
5 rows in set (0.00 sec)

5단계: INSERT와 SELECT 문 결합 실행

이제 핵심인 INSERT와 SELECT 문의 결합을 살펴보겠습니다. 'getAllValues' 테이블에서 조건에 맞는 레코드만 골라 'CombiningInsertValuesSelect' 테이블에 삽입합니다.

mysql> insert into CombiningInsertValuesSelect(EmployeeId,EmployeeName,EmployeeAge)
    -> select Id,Name,Age from getAllValues where Id='EMP-4';
Query OK, 1 row affected (0.23 sec)
Records: 1 Duplicates: 0 Warnings: 0

WHERE 절에 Id='EMP-4' 조건을 지정했기 때문에 해당 직원의 데이터만 선택되어 새 테이블에 삽입됩니다. 조건을 생략하면 모든 레코드가 한 번에 복사됩니다.

6단계: 결과 확인

SELECT 문으로 레코드가 정상적으로 삽입되었는지 확인합니다.

mysql> select *from CombiningInsertValuesSelect;

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

+------------+--------------+-------------+
| EmployeeId | EmployeeName | EmployeeAge |
+------------+--------------+-------------+
| EMP-4      | David        | 27          |
+------------+--------------+-------------+
1 row in set (0.00 sec)

정리

이처럼 MySQL에서는 INSERT INTO ... SELECT 구문을 활용하면 한 테이블의 데이터를 조건에 따라 다른 테이블로 효율적으로 복사할 수 있습니다. 대량의 데이터를 이전하거나 백업 테이블을 만들 때 특히 유용한 기법이므로 꼭 익혀두시기 바랍니다.