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

MySQL INSERT INTO SELECT 쿼리에서 정적 값을 추가하는 방법

MySQL에서 INSERT INTO SELECT 쿼리를 실행할 때 정적(고정) 값을 함께 삽입할 수 있습니다. 방법은 크게 두 가지로, SELECT 문에 원하는 값을 직접 작성하거나, 미리 초기화한 변수를 활용하는 것입니다.

방법 1: INSERT INTO SELECT 문에 값 직접 입력

정적 값을 SELECT 문 안에 직접 작성하는 방식입니다. 기본 문법은 다음과 같습니다.

INSERT INTO yourSecondTableName(yourColumnName1,yourColumnName2,....N)
SELECT yourColumnName1 ,yourColumnName2,.....N,yourStaticValue from yourFirstTableName;

방법 2: 변수를 사용해 값 추가

SET 구문으로 변수에 값을 할당한 뒤, 해당 변수를 SELECT 문에서 참조하는 방식입니다.

SET @yourVariableName = yourStaticValue;
INSERT INTO yourSecondTableName(yourColumnName1,yourColumnName2,....N)
SELECT yourColumnName1 ,yourColumnName2,.....N,@yourVariableName from yourFirstTableName;

실습 예제

위 문법을 이해하기 위해 두 개의 테이블을 만들어 보겠습니다. 첫 번째 테이블에는 데이터가 들어 있고, 두 번째 테이블에는 INSERT INTO SELECT 문을 통해 첫 번째 테이블의 레코드와 정적 값을 함께 삽입합니다.

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

테이블을 생성하는 쿼리는 다음과 같습니다.

mysql> create table First_table
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> FirstValue int,
-> SecondValue int,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.56 sec)

2단계: 데이터 삽입

insert 명령을 사용해 몇 개의 레코드를 삽입합니다.

mysql> insert into First_table(FirstValue,SecondValue) values(10,14);
Query OK, 1 row affected (0.20 sec)

mysql> insert into First_table(FirstValue,SecondValue) values(12,13);
Query OK, 1 row affected (0.52 sec)

mysql> insert into First_table(FirstValue,SecondValue) values(100,110);
Query OK, 1 row affected (0.14 sec)

mysql> insert into First_table(FirstValue,SecondValue) values(45,55);
Query OK, 1 row affected (0.27 sec)

3단계: 데이터 확인

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

mysql> select *from First_table;

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

+----+------------+-------------+
| Id | FirstValue | SecondValue |
+----+------------+-------------+
| 1 | 10 | 14 |
| 2 | 12 | 13 |
| 3 | 100 | 110 |
| 4 | 45 | 55 |
+----+------------+-------------+
4 rows in set (0.00 sec)

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

이제 두 번째 테이블을 만들어 보겠습니다.

mysql> create table Second_table
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Value1 int,
-> Value2 int,
-> Value3 int,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.81 sec)

두 번째 테이블은 세 개의 컬럼으로 구성되어 있으며, 앞의 두 컬럼은 첫 번째 테이블에서 값을 가져오고 세 번째 컬럼에는 직접 또는 간접적으로 정적 값이 들어갑니다.

방법 1 적용: 세 번째 컬럼에 정적 값 직접 추가

세 번째 컬럼에 정적 값 45를 직접 넣는 쿼리입니다.

mysql> insert into Second_table(Value1,Value2,Value3)
-> select FirstValue,SecondValue,45 from First_table;
Query OK, 4 rows affected (0.16 sec)
Records: 4 Duplicates: 0 Warnings: 0

select 문으로 모든 레코드를 확인해 보겠습니다.

mysql> select *from Second_table;

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

+----+--------+--------+--------+
| Id | Value1 | Value2 | Value3 |
+----+--------+--------+--------+
| 1 | 10 | 14 | 45 |
| 2 | 12 | 13 | 45 |
| 3 | 100 | 110 | 45 |
| 4 | 45 | 55 | 45 |
+----+--------+--------+--------+
4 rows in set (0.00 sec)

방법 2 적용: 변수를 사용해 정적 값 추가

이번에는 변수를 활용해 세 번째 컬럼에 값 20을 추가해 보겠습니다.

mysql> set @staticValue = 20;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into Second_table(Value1,Value2,Value3)
-> select FirstValue,SecondValue,@staticValue from First_table;
Query OK, 4 rows affected (0.19 sec)
Records: 4 Duplicates: 0 Warnings: 0

다시 한번 select 문으로 테이블의 레코드를 확인합니다.

mysql> select *from Second_table;

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

+----+--------+--------+--------+
| Id | Value1 | Value2 | Value3 |
+----+--------+--------+--------+
| 1 | 10 | 14 | 20 |
| 2 | 12 | 13 | 20 |
| 3 | 100 | 110 | 20 |
| 4 | 45 | 55 | 20 |
+----+--------+--------+--------+
4 rows in set (0.00 sec)

마무리

이처럼 INSERT INTO SELECT 문에서는 SELECT 절에 리터럴 값을 직접 넣거나 사용자 정의 변수(@변수명)를 활용해 정적 값을 손쉽게 추가할 수 있습니다. 고정된 값 하나만 필요하다면 방법 1이 간편하고, 값이 여러 쿼리에서 재사용되거나 동적으로 변경될 가능성이 있다면 방법 2처럼 변수를 사용하는 것이 유지보수 측면에서 더 유리합니다.