SELECT INSERT
특정 테이블에서 데이터를 조회한 결과를 다른 테이블에 삽입하는 걸 간단히 SELECT INSERT라고 한다.
컬럼 추가와 같이 많은 데이터가 저장된 테이블 스키마를 변경해야 하는 경우, 스키마를 변경하는 것보다 TO_BE 스키마를 가진 테이블을 생성하여 데이터를 복사한 후, 테이블 이름을 변경하는 것이 좀더 수행 시간을 절약할 수 있기 때문에 종종 사용하게 된다.
INSERT INTO SELECT 구문이라고도 말한다.
한 테이블의 모든 열 복사
INSERT INTO table2
SELECT * FROM table1
WHERE condition;
예시 )
아래와 같은 데이터가 저장된 Customers 테이블을 Suppliers라는 테이블로 복사하려고 한다.
테이블 스키마는 다음과 같다.
create table Customers (
CustomerID INT,
CustomerName VARCHAR(50),
ContactName VARCHAR(30),
Address VARCHAR(30),
City VARCHAR(30),
PostalCode INT,
Country VARCHAR(30)
);
동일한 스키마로 Suppliers 테이블을 생성한다.
SHOW COLUMNS
FROM Suppliers;
Customers 테이블의 데이터 모두를 Select해서 Customers2 테이블로 삽입한다.
INSERT INTO Suppliers
SELECT *
FROM Customers;
한 테이블의 일부 열만 복사
INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition;
예시 )
Customers 테이블을 Suppliers라는 테이블로 복사하려고 한다.
다만 모든 열이 아니라 CustomerID, CustomerName만 복사하려고 한다. 그리고 Suppliers의 스키마는 아래와 같다.
create table Suppliers (
CustomerID INT,
CustomerName VARCHAR(50),
ContactName VARCHAR(30),
Address VARCHAR(30),
City VARCHAR(30),
PostalCode INT,
Country VARCHAR(30),
CrtDate DATETIME DEFAULT CURRENT_TIMESTAMP
);
특정 열만을 Select해서 삽입한다.
INSERT INTO Suppliers (CustomerID, CustomerName)
SELECT CustomerID, CustomerName
FROM Customers;
Select하지 않은 열은 null로 설정된 것을 확인할 수 있다.
참고 문서
https://www.w3schools.com/mysql/mysql_insert_into_select.asp