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

MySQL 단일 쿼리로 두 테이블에서 데이터를 선택하고 삽입하는 방법

MySQL에서 하나의 쿼리로 SELECT와 INSERT 동시에 처리하기

MySQL에서는 INSERT INTO ... SELECT 문과 UNION ALL을 조합하면 단일 쿼리만으로 다른 테이블의 데이터를 조회하면서 새로운 테이블에 삽입할 수 있습니다. 이번 글에서는 실제 예제를 통해 그 과정을 단계별로 살펴보겠습니다.

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

먼저 학생 이름과 점수를 저장할 첫 번째 테이블을 생성합니다.

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

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

개념을 이해하기 위해 이름만 저장하는 두 번째 테이블도 만들어 보겠습니다.

mysql> create table DemoTable2
    -> (
    -> Name varchar(20)
    -> );
Query OK, 0 rows affected (0.61 sec)

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

INSERT 명령을 사용해 두 번째 테이블에 샘플 데이터를 추가합니다.

mysql> insert into DemoTable2 values('Chris');
Query OK, 1 row affected (0.12 sec)

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

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

mysql> select * from DemoTable2;

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

+-------+
| Name  |
+-------+
| Chris |
+-------+
1 row in set (0.00 sec)

5단계: 단일 쿼리로 선택과 삽입 동시에 수행

이제 핵심 부분입니다. 아래 쿼리처럼 INSERT INTO와 SELECT, 그리고 UNION ALL을 함께 사용하면 하나의 MySQL 쿼리로 레코드를 선택하고 삽입할 수 있습니다.

mysql> insert into DemoTable1
    -> select Name,89 from DemoTable2
    -> union all
    -> select Name,98 from DemoTable2;
Query OK, 2 rows affected (0.15 sec)
Records: 2  Duplicates: 0  Warnings: 0

위 쿼리는 DemoTable2에서 'Chris'라는 이름을 조회한 뒤, 각각 89점과 98점이라는 서로 다른 점수를 붙여 두 개의 행으로 DemoTable1에 삽입합니다.

6단계: 결과 확인

첫 번째 테이블에서 레코드를 조회해 삽입이 정상적으로 이루어졌는지 확인합니다.

mysql> select * from DemoTable1;

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

+-------------+--------------+
| StudentName | StudentMarks |
+-------------+--------------+
| Chris       |          89 |
| Chris       |          98 |
+-------------+--------------+
2 rows in set (0.00 sec)

정리

이처럼 INSERT INTO ... SELECT ... UNION ALL 구문을 활용하면 별도의 여러 쿼리를 실행하지 않고도 한 번의 요청으로 데이터를 조회하고 변형하여 다른 테이블에 삽입할 수 있습니다. 대량의 데이터를 복사하거나 점수처럼 고정된 값을 추가하며 데이터를 이관할 때 특히 유용한 기법입니다.