본문 바로가기
프로그래밍/MySQL

📊 [SQL] 제34장 INSERT(2) - 조회한 결과를 그대로 저장할 수 있을까요?

by 강릉바다의 블로그 2026. 7. 10.

제34장. INSERT (2)

"조회한 결과를 그대로 저장할 수 있을까요?"


학습 목표

이번 장을 학습하면 다음 내용을 할 수 있습니다.

  • 여러 개의 데이터를 한 번에 추가할 수 있다.
  • SELECT 문의 결과를 다른 테이블에 저장할 수 있다.
  • INSERT ... SELECT 문을 작성할 수 있다.
  • 실제 업무에서 INSERT ... SELECT가 어떻게 활용되는지 설명할 수 있다.

지난 시간을 떠올려 봅시다.

지난 시간에는 새로운 데이터를 직접 입력하는 방법을 배웠습니다.

예를 들어 새로운 고객을 추가하려면 다음과 같이 작성했습니다.

INSERT INTO Customers
(
    CustomerID,
    CustomerName,
    Country
)
VALUES
(
    100,
    '홍길동',
    'Korea'
);

이 방법은 입력할 데이터가 적을 때는 매우 편리합니다.

그런데 이런 상황이라면 어떨까요?

"독일 고객만 따로 모아서 새로운 테이블에 저장하고 싶어요."

 

한 명씩 다시 입력해야 할까요?

그럴 필요는 없습니다.


SELECT의 결과도 저장할 수 있습니다.

우리는 지금까지

SELECT

를 이용하여 데이터를 조회했습니다.

그런데 조회한 결과를

바로 다른 테이블에 저장할 수도 있습니다.

이때 사용하는 문장이

INSERT ... SELECT입니다.


기본 문법

INSERT INTO 테이블이름
(
    컬럼1,
    컬럼2,
    ...
)

SELECT
    컬럼1,
    컬럼2,
    ...
FROM 원본테이블;

VALUES 대신

SELECT가 들어간다는 점이 가장 큰 특징입니다.


먼저 새로운 테이블을 준비합니다.

실습을 위해 다음과 같은 테이블이 있다고 가정합니다.

KoreaCustomers
CustomerID CustomerName Country

이제 Customers 테이블에서

대한민국 고객만 저장해 보겠습니다.


예제 1

INSERT INTO KoreaCustomers
(
    CustomerID,
    CustomerName,
    Country
)

SELECT
    CustomerID,
    CustomerName,
    Country
FROM Customers
WHERE Country = 'Korea';

실행 결과

Customers
↓
대한민국 고객만 선택
↓
KoreaCustomers에 저장

대한민국 고객이 모두

새로운 테이블에 추가됩니다.

한 명씩 입력하지 않아도 됩니다.


SQL를 한 줄씩 살펴보기

INSERT INTO KoreaCustomers

데이터를 저장할 테이블입니다.


(CustomerID,
 CustomerName,
 Country)

저장할 컬럼을 지정합니다.


SELECT

복사할 데이터를 조회합니다.


WHERE Country = 'Korea'

대한민국 고객만 선택합니다.


그림으로 이해하기

Customers
        SELECT
──────────────▶
대한민국 고객
──────────────▶
INSERT
──────────────▶
KoreaCustomers

즉,

조회한 결과가

그대로 저장됩니다.


여러 행도 한 번에 저장됩니다.

조회 결과가

1명이든

10명이든

1,000명이든

모두 한 번에 저장됩니다.

이것이

INSERT ... SELECT의 가장 큰 장점입니다.


실제 업무에서는?

실무에서는 다음과 같은 작업에 자주 사용됩니다.

  • 올해 가입한 회원만 별도로 저장하기
  • 퇴사한 직원 정보를 보관용 테이블로 이동하기
  • 판매가 완료된 주문을 백업 테이블에 저장하기
  • 특정 지역 고객만 마케팅 대상 테이블로 복사하기

수천 건의 데이터를 한 번에 처리할 수 있기 때문에

매우 자주 사용됩니다.


많이 하는 실수

실수 ①

컬럼 개수가 다르다.

INSERT INTO KoreaCustomers
(
    CustomerID,
    CustomerName
)

SELECT
CustomerID
FROM Customers;

컬럼 수가 서로 같아야 합니다.


실수 ②

컬럼의 자료형이 다르다.

예를 들어

숫자를 저장하는 컬럼에

문자를 넣으려고 하면 오류가 발생할 수 있습니다.


실수 ③

WHERE 조건을 작성하지 않는다.

INSERT INTO KoreaCustomers

SELECT *
FROM Customers;

원하지 않는 데이터까지

모두 저장될 수 있습니다.

실무에서는 특히 주의해야 합니다.


실무 습관

INSERT ... SELECT를 실행하기 전에 SELECT만 먼저 실행해 보세요.

 

예를 들어

SELECT
CustomerID,
CustomerName,
Country
FROM Customers
WHERE Country='Korea';

결과가 원하는 데이터인지 확인한 후

앞에

INSERT INTO KoreaCustomers

만 추가하면

실수를 크게 줄일 수 있습니다.

실무에서는 거의 모든 개발자가 사용하는 습관입니다.


한눈에 정리

목적 SQL
직접 값을 입력한다. INSERT ... VALUES
조회한 결과를 저장한다. INSERT ... SELECT

이번 장 핵심 정리

✅ 여러 행을 한 번에 저장할 수 있다.

✅ SELECT 결과를 다른 테이블에 저장할 수 있다.

✅ INSERT ... SELECT는 실무에서 매우 많이 사용된다.

✅ INSERT하기 전에 SELECT만 먼저 실행하여 결과를 확인하는 습관이 중요하다.


연습 문제

기본 문제

① Customers 테이블의 모든 고객을 BackupCustomers 테이블에 저장하는 SQL을 작성하시오.

② Products 테이블의 상품명을 ProductBackup 테이블에 저장하는 SQL을 작성하시오.


응용 문제

① 독일(Germany) 고객만 GermanyCustomers 테이블에 저장하는 SQL을 작성하시오.

② 가격이 30 이상인 상품만 ExpensiveProducts 테이블에 저장하는 SQL을 작성하시오.


도전 문제

Customers 테이블에서

국가가 USA 또는 UK인 고객만

EnglishCustomers 테이블에 저장하는 SQL을 작성하시오.


정답

기본 문제

INSERT INTO BackupCustomers
(
    CustomerID,
    CustomerName,
    Country
)

SELECT
    CustomerID,
    CustomerName,
    Country
FROM Customers;

응용 문제

INSERT INTO GermanyCustomers
(
    CustomerID,
    CustomerName,
    Country
)

SELECT
    CustomerID,
    CustomerName,
    Country
FROM Customers
WHERE Country = 'Germany';