Database

[MySQL] SELECT INSERT

비번변경 2022. 7. 9. 22:39

SELECT INSERT

특정 테이블에서 데이터를 조회한 결과를 다른 테이블에 삽입하는 걸 간단히 SELECT INSERT라고 한다.

컬럼 추가와 같이 많은 데이터가 저장된 테이블 스키마를 변경해야 하는 경우, 스키마를 변경하는 것보다 TO_BE 스키마를 가진 테이블을 생성하여 데이터를 복사한 후, 테이블 이름을 변경하는 것이 좀더 수행 시간을 절약할 수 있기 때문에 종종 사용하게 된다.

INSERT INTO SELECT 구문이라고도 말한다.

 

 

 

한 테이블의 모든 열 복사

INSERT INTO table2
SELECT * FROM table1
WHERE condition;

 

 

예시 )

아래와 같은 데이터가 저장된 Customers 테이블을 Suppliers라는 테이블로 복사하려고 한다.

Cutsomers 테이블

테이블 스키마는 다음과 같다.

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;

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라는 테이블로 복사하려고 한다.

Customers 테이블

다만 모든 열이 아니라 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