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

MySQL에서 다른 테이블의 문자열만 참조하여 행을 추가하는 방법 – INSERT INTO SELECT 완벽 가이드

MySQL에서 한 테이블에 저장된 특정 컬럼의 값(문자열)만 가져와 다른 테이블에 새로운 행으로 삽입하려면 INSERT INTO ... SELECT 문을 사용하면 됩니다. 이 방식은 별도의 애플리케이션 로직 없이 SQL 문 하나로 기존 데이터를 손쉽게 복사·이전할 수 있어 매우 유용합니다.

1. 예제용 첫 번째 테이블 생성

먼저 원본 데이터가 담길 테이블을 생성합니다.

mysql> create table demo61
-> (
-> id int,
-> name varchar(20)
-> );
Query OK, 0 rows affected (1.84 sec)

2. 원본 테이블에 데이터 삽입

INSERT 명령으로 몇 개의 레코드를 추가합니다.

mysql> insert into demo61 values(1,'John');
Query OK, 1 row affected (0.63 sec)

mysql> insert into demo61 values(2,'David');
Query OK, 1 row affected (0.13 sec)

mysql> insert into demo61 values(1,'Mike');
Query OK, 1 row affected (0.10 sec)

mysql> insert into demo61 values(2,'Carol');
Query OK, 1 row affected (0.30 sec)

mysql> insert into demo61 values(2,'Bob');
Query OK, 1 row affected (0.09 sec)

3. 저장된 데이터 확인

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

mysql> select *from demo61;

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

+------+-------+
| id | name |
+------+-------+
| 1 | John |
| 2 | David |
| 1 | Mike |
| 2 | Carol |
| 2 | Bob |
+------+-------+
5 rows in set (0.00 sec)

4. 두 번째 테이블 생성

이번에는 자동 증가(AUTO_INCREMENT) 기본 키를 가진 대상 테이블을 만듭니다. employee_id는 직접 입력하지 않아도 자동으로 순번이 부여됩니다.

mysql> create table demo62
-> (
-> employee_id int not null auto_increment primary key,
-> employee_name varchar(20)
-> );
Query OK, 0 rows affected (1.60 sec)

5. INSERT INTO SELECT로 다른 테이블 값 참조하기

핵심은 바로 이 단계입니다. demo61 테이블에서 id가 2인 행의 name 값만 선택하여 demo62 테이블의 employee_name 컬럼에 삽입합니다.

mysql> insert into demo62(employee_name)
-> select name from demo61 where id=2;
Query OK, 3 rows affected (0.14 sec)
Records: 3 Duplicates: 0 Warnings: 0

INSERT 문에 컬럼 목록(employee_name)만 지정했기 때문에, SELECT 결과의 name 값들이 해당 컬럼에 순서대로 들어가고, employee_id는 AUTO_INCREMENT 설정에 따라 1부터 자동 생성됩니다.

6. 최종 결과 확인

두 번째 테이블을 조회하면 조건에 맞는 이름들만 새로운 행으로 추가된 것을 확인할 수 있습니다.

+-------------+---------------+
| employee_id | employee_name |
+-------------+---------------+
| 1 | David |
| 2 | Carol |
| 3 | Bob |
+-------------+---------------+
3 rows in set (0.00 sec)

정리

이처럼 INSERT INTO 테이블명(컬럼...) SELECT ... FROM 다른테이블 WHERE 조건 형태를 사용하면, 다른 테이블의 특정 문자열 값만 참조해 원하는 테이블에 행을 간편하게 추가할 수 있습니다. WHERE 절을 조정하거나 JOIN을 결합하면 더욱 복잡한 조건의 데이터 이관 작업도 손쉽게 처리할 수 있습니다.