SQLShack (한국어)

이 문서에서는 SQL INSERT INTO SELECT 문을 다룹니다. 구문, 예제 및 사용 사례와 함께.

이전 기사 인 SQL SELECT INTO 문에서 다음 작업을 살펴 보았습니다.

  • 적절한 데이터 유형으로 레코드를 삽입하는 동안 즉석에서 SQL 테이블 만들기
  • SQL SELECT INTO를 사용하여 특정 파일 그룹에 레코드 삽입
  • 기존 테이블에 데이터를 삽입하는 데 사용할 수 없습니다.

INSERT INTO SELECT 문

레코드를 일반 데이터베이스 활동으로 삽입하려고합니다. SSMS, Azure Data Studio와 같은 클라이언트 도구를 사용하거나 애플리케이션에서 직접 데이터를 삽입 할 수 있습니다. SQL에서는 SQL INSERT INTO 문을 사용하여 레코드를 삽입합니다.

INSERT INTO 구문

일단 데이터를 테이블에 삽입하면 다음 구문을 사용할 수 있습니다. SQL INSERT INTO 문.

1
2

INSERT INTO table_name (열 1, 열 2 ….)
값 (값 1, 값 2, …);

테이블 열에 따라 모든 열 값을 지정한 경우 주문, 열 이름을 지정할 필요가 없습니다. 레코드를 테이블에 직접 삽입 할 수 있습니다.

1
2

INSERT INTO table_name
VALUES (값 1, 값 2, …);

샘플 테이블을 만들고 여기에 데이터를 삽입하겠습니다. .

1
2
3
4

CREATE TABLE 직원
(ID INT,
이름 VARCHAR (20)
);

다음 쿼리를 사용하여 데이터를 삽입 할 수 있습니다. 두 쿼리 모두 데이터 삽입에 유효합니다.

1
2

직원 (ID, 이름) 값에 삽입 (1, “raj”)
직원 값에 삽입 (2, “raj”)

열 이름을 지정하지 않으면 데이터를 삽입 할 수 없습니다. 데이터 삽입과 열 값의 순서가 일치하지 않습니다. 다음과 같은 오류 메시지가 표시 될 수 있습니다.

  • Msg 213, Level 16, State 1, Line 6

    열 이름 또는 제공된 값의 수는 그렇지 않습니다. 데이터 이동 색인 정의.

  • 메시지 245, 수준 16, 상태 1, 줄 6

    varchar 값 raj를 데이터 유형 int로 변환 할 때 변환에 실패했습니다.

이 예에서는 SQL INSERT INTO 문을 사용하여 문에 직접 값을 제공합니다. 다른 테이블의 데이터를 삽입한다고 가정 해 보겠습니다. SELECT 문과 함께 SQL INSERT INTO 문을 계속 사용할 수 있습니다. 다음 섹션에서 이에 대해 살펴 보겠습니다.

INSERT INTO SELECT 문 구문

다음 INSERT INTO SELECT 문을 사용하여 다른 SQL 테이블의 데이터를 테이블에 삽입 할 수 있습니다.

1
2
3

INSERT INTO table1 (col1, col2, col3,…)
SELECT col1, col2, col3,…
FROM table2

이 쿼리는 다음 작업을 수행합니다.

  • 먼저 테이블에서 레코드를 선택합니다 (Select 문)
  • 다음으로 INSERT INTO로 지정된 테이블에 삽입합니다.
  • 참고 : 열 구조는 SELECT 문에서 반환 한 열과 대상 테이블간에 일치해야합니다.

INSERT INTO SELECT 예제

예 1 : 원본 테이블의 모든 열에서 대상 테이블로 데이터 삽입

다음 레코드가 기존 Employee 테이블.

다음 쿼리를 사용하여 또 다른 테이블 Customers를 생성하겠습니다.

1
2
3
4

CREATE TABLE Customers
(ID INT,
Name VARCHAR (20)
);

Employees 테이블의 모든 레코드를 Customers 테이블. SQL INSERT INTO SELECT 문을 사용하여이를 수행 할 수 있습니다.

1
2
3

고객에게 삽입
SELECT *
직원으로부터;

모든 레코드를 Customers 테이블에 삽입합니다. Customers 테이블의 레코드가 Employees 테이블과 유사한 지 확인할 수 있습니다.

이 예에서는 모든 레코드에 대한 레코드를 삽입했습니다. 열을 Customers 테이블에 추가합니다.

예 2 : 열 이름을 지정하여 원본에서 대상 테이블로 행 삽입

계속 진행하기 전에 기존 Customers 테이블을 삭제하겠습니다. 이제 하나의 추가 IDENTITY 열이있는 테이블을 생성하려고합니다. IDENTITY 열은 테이블에 ID 값을 자동으로 삽입합니다. 또한 NULL 값을 허용하는 도시 열을 추가했습니다.

1
2
3
4
5
6

만들기 테이블 고객
(ID INT IDENTITY (1, 1),
Emp_ID INT,
이름 VARCHAR (20),
도시 VARCHAR (20) NULL,
);

다음과 유사한 INSERT INTO SELECT 문을 사용할 수 없습니다. 위의 예. 이 코드를 실행하려고하면 오류 메시지가 표시됩니다.

1
2
3

고객에게 삽입
SELECT *
직원으로부터 ;

이 경우 INSERT INTO 문으로 열 이름을 지정해야합니다.

1
2
3

고객에게 삽입 (Emp_ID, Name)
SELECT *
FROM 직원;

Customers 테이블에는 다음과 같은 추가 열이 있습니다. NULL 값을 허용합니다. Select on Customers 테이블을 실행 해 보겠습니다. 다음 스크린 샷에서 City 열에서 NULL 값을 볼 수 있습니다.

소스 테이블에 다른 열이 있다고 가정합니다. INSERT INTO SELECT 문에 열 이름을 지정하여 대상 테이블에 레코드를 계속 삽입 할 수 있습니다. 데이터를 삽입하려면 적절한 데이터 유형이 있어야합니다. varchar 열 데이터를 INT 열에 삽입 할 수 없습니다.

ALTER TABLE 문을 사용하여 Employees 테이블에 새 열을 추가합니다.

1
2

ALTER TABLE 직원
국가 추가 varchar (50);

국가 값 India로 테이블 레코드를 업데이트합니다.

1

직원 업데이트 설정 Country = “India”

이제 INSERT INTO를 다시 실행하십시오. SELECT 문. 열 이름을 지정하는 대신 SELECT *를 사용하고 있음을 알 수 있습니다.

1
2
3

INSERT INTO Customers (Emp_ID, Name)
SELECT *
직원으로부터;

다음과 같은 오류 메시지가 표시됩니다. 이 오류는 원본 테이블과 대상 테이블 간의 열 불일치로 인해 발생합니다.

다음 쿼리를 사용하여 소스 테이블과 대상 테이블 간의 열을 매핑 할 수 있습니다.

1
2
3
4
5
6

고객에게 삽입
(Emp_ID,
이름
)
SELECT ID, Name
from Employees;

예 3 : INSERT INTO SELECT를 사용하여 맨 위 행 삽입 statement

원본 테이블의 상위 N 개 행을 대상 테이블에 삽입한다고 가정합니다. INSERT INTO SELECT 문에서 Top 절을 사용할 수 있습니다. 다음 쿼리에서는 Employees 테이블의 상위 1 개 행을 Customers 테이블에 삽입합니다.

1
2
3
4
5
6

INSERT TOP (1) INTO Customers
(Emp_ID,
Name
)
SELECT 직원의 ID, 이름

예 4 : 열과 정의 된 값을 모두 사용하여 삽입 SQL INSERT INTO SELECT 문

이전 예제에서 INSERT INTO 문에 특정 값을 지정하거나 INSERT INTO SELECT를 사용하여 원본 테이블에서 레코드를 가져와 대상 테이블에 삽입했습니다.

SQL INSERT INTO SELECT 문에서 열과 정의 된 값을 결합 할 수 있습니다.

Customers 및 Employees 테이블에는 다음 열이 있습니다. 이전에는 City 열에 대한 값을 삽입하지 않았습니다. Employee 테이블에도 필수 값이 없습니다. City 열에 대해 명시적인 값을 지정해야합니다.

다음 쿼리에서 City에 대한 값을 지정했습니다. Employees 테이블에서 삽입 한 나머지 값은 열입니다.

1
2

INSERT TOP (1) INTO Customers (Emp_ID, Name, City)
SELECT ID, Name, “Delhi” 직원으로부터;

다음 쿼리에서 하나를 삽입하는 것을 볼 수 있습니다. 행 (Top (1) 절로 인해)과 City 열의 값.

예 5 : INSERT INTO SELECT 여러 테이블에서 데이터를 가져 오기 위해 Join 절이있는 문

JOIN 절을 사용하여 여러 테이블에서 데이터를 가져올 수 있습니다. 이러한 테이블은 ON 절로 지정된 조건으로 조인됩니다. 여러 테이블에서 데이터를 가져 와서 테이블에 삽입한다고 가정합니다.

이 예에서는 AdventureWorks2017 데이터베이스를 사용하고 있습니다. 먼저 적절한 데이터 유형으로 새 테이블을 만듭니다.

이 테이블에는 다중 테이블 조인 쿼리 출력의 레코드가 포함되어야합니다. 다음 쿼리를 실행하여 HumanResources.EmployeeData 테이블에 데이터를 삽입합니다.

예 6 : INSERT INTO SELECT 문 공통 테이블 식

여러 열에서 복잡한 조인을 단순화하기 위해 CTE (Common Table Expressions)를 사용합니다. 이전 예에서는 SQL 테이블에 데이터를 삽입하기 위해 Select 문에서 JOINS를 사용했습니다. 이 부분에서는 CTE로 쿼리를 다시 작성합니다.

CTE에서는 코드를 두 부분으로 나눌 수 있습니다.

  1. SELECT, INSERT, UPDATE, DELETE 문 앞에 WITH 절로 CTE를 정의합니다.
  2. CTE를 정의하면 관계형 SQL 테이블과 유사한 CTE를 참조 할 수 있습니다.

다음 코드를 실행하여 CTE를 사용하여 데이터를 삽입합니다.

예 7 : 테이블 변수가있는 INSERT INTO SELECT 문

우리는 임시 테이블과 유사하게 테이블 변수를 사용합니다. 테이블 데이터 유형을 사용하여 선언 할 수 있습니다. 이 테이블은 영구 테이블이 필요하지 않은 SQL Server에서 작업을 수행하는 데 사용할 수 있습니다. 다음 쿼리를 세 부분으로 나눌 수 있습니다.

  1. 적절한 열 데이터 유형으로 SQL 테이블 변수를 만듭니다. 테이블 변수에 데이터 유형 TABLE을 사용해야합니다.
  2. INSERT INTO SELECT 문을 실행하여 데이터를 테이블 변수에 삽입
  3. 테이블 변수 결과 집합보기

결론

이 기사에서는 INSERT INTO SELECT 문의 사용 사례를 살펴 봅니다. 이 기사가 도움이 되었기를 바랍니다. 아래 의견에 의견을 보내주십시오.

  • 작성자
  • 최근 게시물
MCSA 인증 인도 구르 가온의 Microsoft Certified Trainer와 13 년의 경험을 보유한 Rajendra는 성능 최적화, 모니터링, 고 가용성, 재해 복구 전략 및 구현에 중점을 둔 다양한 대기업에서 근무하고 있습니다. 그는 SQL Server, Azure, MySQL, Linux, Power BI, 성능 조정, AWS / Amazon RDS, Git 및 현재까지 1,000 만 명이 넘는 독자가 시청 한 관련 기술에 대한 수백 개의 권위있는 기사의 저자입니다.
그는 SQL Server Always On 가용성 그룹에 대한 50 부작 시리즈를 통해 단일 주제에 대한 가장 큰 무료 온라인 기사 모음 중 하나를 작성했습니다. SQL Server 커뮤니티에 대한 공헌을 바탕으로 2020 년과 2021 년 SQLShack에서 지속적으로 권위있는 “올해의 최우수 저자”를 비롯한 다양한 상을 수상했습니다.
Raj는 항상 새로운 도전에 관심이 있으므로 컨설팅이 필요한 경우 그의 글에서 다루는 주제에 대한 도움은 [email protected]으로 연락 할 수 있습니다.
Rajendra Gupta의 모든 게시물보기

Rajendra Gupta의 최신 게시물 (전체보기)
  • AWS에 대한 마이너 및 메이저 버전 업그레이드 수행 RDS SQL Server-2021 년 1 월 29 일
  • AWS RDS PostgreSQL 인스턴스 배포-2021 년 1 월 27 일
  • AWS DMS를 사용하여 온 프레미스 SQL 데이터베이스를 AWS RDS SQL Server로 마이그레이션-1 월 25 일 , 2021

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다