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

MySQL에서 INSERT INTO SELECT와 UNION으로 여러 레코드 한 번에 삽입하는 방법

MySQL에서 여러 개의 레코드를 하나의 쿼리로 동시에 삽입하려면 INSERT INTO ... SELECT 구문과 UNION을 함께 사용할 수 있습니다. 각 SELECT 절이 반환하는 한 행씩이 테이블에 삽입되며, UNION으로 여러 SELECT를 연결하면 원하는 만큼의 행을 한 번에 추가할 수 있습니다.

기본 문법

여러 개의 데이터를 삽입할 때 사용하는 기본 문법은 다음과 같습니다.

insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,..N)
    select yourValue1 as yourColumnName1,yourValue2 as yourColumnName2,yourValue3 as yourColumnName3,......N
    union
    select yourValue1 as yourColumnName1,yourValue2 as yourColumnName2,yourValue3 as yourColumnName3,......N
.
.
N

각 SELECT 절에서 별칭(alias)을 지정해 컬럼 이름을 명시적으로 표현하면 코드의 가독성이 크게 향상됩니다.

예제 테이블 생성

위 문법을 실제로 확인해 보기 위해 먼저 테이블을 생성해 보겠습니다.

mysql> create table DemoTable1936
    (
    StudentId int,
    StudentName varchar(20),
    StudentCountryName varchar(20)
    );
Query OK, 0 rows affected (0.00 sec)

학생 ID, 이름, 국가명을 저장하는 세 개의 컬럼으로 구성된 테이블이 정상적으로 생성되었습니다.

INSERT INTO SELECT와 UNION으로 데이터 삽입

이제 insert 명령과 UNION을 조합하여 세 개의 레코드를 한 번에 삽입해 보겠습니다.

mysql> insert into DemoTable1936(StudentId,StudentName,StudentCountryName)
    select 1001 as StudentId,'Chris' as StudentName,'US' as StudentCountryName
    union
    select 1002 as StudentId,'Robert' as StudentName,'UK' as StudentCountryName
    union
    select 1003 as StudentId,'David' as StudentName,'AUS' as StudentCountryName;
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

실행 결과를 보면 중복 없이 3개의 레코드가 성공적으로 삽입된 것을 확인할 수 있습니다.

삽입 결과 확인

select 문을 사용하여 테이블에 저장된 모든 레코드를 조회합니다.

mysql> select * from DemoTable1936;

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

+-----------+-------------+--------------------+
| StudentId | StudentName | StudentCountryName |
+-----------+-------------+--------------------+
|      1001 | Chris       |               US   |
|      1002 | Robert      |               UK   |
|      1003 | David       |              AUS   |
+-----------+-------------+--------------------+
3 rows in set (0.00 sec)

참고 사항

MySQL 8.0 이상에서는 INSERT INTO 테이블명 VALUES (...), (...), (...) 형태의 다중 행 VALUES 구문도 지원하므로 상황에 따라 더 간결하게 사용할 수 있습니다. 다만 INSERT INTO SELECT와 UNION을 활용하면 조건부 선택이나 다른 테이블과의 결합 등 더 유연한 데이터 삽입 로직을 구성할 수 있다는 장점이 있습니다.