반응형
INSERT INTO SELECT 에 대한 사용법을 설명하기 전에 아래의 테스트 테이블 구조를 확인해봅시다.
테이블의 컬럼 정보
insertTestTable
- id
- int / auto increment / primary key
- 기본 키를 가지고 자동으로 1씩 증가하는 정수형의 id 이름을 가진 컬럼
- name
- nchar(10)
- 문자열을 저장할 수 있는 name 이름을 가진 컬럼
기존의 INSERT 문법
기존의 인서트 문은 아래와 같습니다.
- INSERT INTO 테이블명 (컬럼명) VALUES (입력할값)
-- 기존의 INSERT 문법
INSERT INTO insertTestTable
(name)
VALUES
('tester1')
- 아래와 같이 정상적으로 'tester1'이라는 데이터가 추가된 것을 확인할 수 있습니다.
select
*
from
insertTestTable
INSERT INTO SELECT
SELECT를 사용하여 값을 추가하는 방법이 있습니다.
단, 반드시 입력하는 컬럼의 조건을 맞추어 줘야 합니다.
조건에는 데이터 타입과 입력하는 컬럼의 갯수, 순서가 있습니다.
포스팅에서는 이해를 돕기 위한 간단한 예시로 사용 방법에 대한 문법 형식을 위주로 설명합니다.
기본 구문
- INSERT INTO SELECT 입력할값
-- SELECT를 사용하여 INSERT한 문법
INSERT INTO insertTestTable
SELECT 'tester2'
- 아래와 같이 정상적으로 'tester2'이라는 데이터가 추가된 것을 확인할 수 있습니다.
- 이 후 SELECT 문에 대한 구문은 생략하고 결과화면만 보여줍니다.
다른 테이블의 컬럼 값 여러 행 넣기
SELECT 를 사용하여 INSERT 문을 사용하는 것은 다른 테이블을 참고하여 값을 추가할 때 (특히 여러행) 편리할 수 있습니다.
- 기존의 테이블 'insertTestTable'
- 다른 테이블의 행의 값을 넣기 위해 임시로 생성한 테이블 'insertTestTable2'
기존의 테이블에 'tester2' 와 'tester3'을 추가해봅시다.
- INSERT INTO 값을 넣을 테이블명 SELECT 추가할 값이 될 컬럼명 FROM 추가할 값이 있는 테이블명
-- SELECT를 사용하여 여러행 INSERT
INSERT INTO insertTestTable
SELECT name FROM insertTestTable2
- 아래와 같이 정상적으로 'tester2', 'tester3' 이라는 데이터가 추가된 것을 확인할 수 있습니다.
여러행 데이터 넣기
UNION ALL 키워드를 사용하여 여러 결과 집합을 하나의 결과 집합으로 만들어 여러행 데이터를 삽입할 수도 있습니다.
UNION ALL 이란?
- 여러 개의 결과 집합을 하나의 결과 집합으로 만들어 주는 것
-- 두 개의 결과 집합을 하나의 결과 집합으로
SELECT 'tester4'
UNION ALL
SELECT 'tester5'
아래와 같이 tester4와 tester5의 결과 집합이 두 개가 나와야 하는데 하나로 합쳐서 나오는 것을 확인할 수 있습니다.
UNION ALL을 활용하여 테이블에 데이터를 추가해봅시다.
- INSERT INTO 테이블명 SELECT 값 ONION ALL SELECT 값 ...
INSERT INTO insertTestTable
SELECT 'tester4'
UNION ALL
SELECT 'tester5'
- UNION ALL을 활용하여 하나의 결과 집합으로 만들고 INSERT INTO SELECT를 수행한 결과 화면
반응형