Computer >> 컴퓨터 >  >> 프로그래밍 >> SQL Server

SQL Server INSERT 문 완벽 정리: 테이블에 데이터 삽입하는 모든 방법

SQL Server(Transact-SQL)의 INSERT 문은 테이블에 하나 이상의 레코드를 삽입할 때 사용하는 핵심 DML 명령어입니다. 이 글에서는 INSERT 문의 기본 문법부터 다중 레코드 삽입, DEFAULT VALUES와 SELECT 절을 활용한 고급 활용법까지 예제와 함께 자세히 살펴보겠습니다.

INSERT 명령어 문법

단일 레코드 삽입

가장 기본적인 형태의 INSERT 구문은 VALUES 키워드를 사용하여 한 번에 하나의 레코드를 삽입합니다.

INSERT INTO bang
(cot1, cot2, ...)
VALUES
(bieuthuc1, bieuthuc2, ...);

전체 문법 형태로는 DEFAULT 또는 NULL 값을 함께 지정할 수도 있습니다.

INSERT INTO bang
(cot1, cot2, ...)
VALUES
(DEFAULT | NULL | bieuthuc1,
DEFAULT | NULL | bieuthuc2,
...);

또는 DEFAULT VALUES 키워드를 사용하면 모든 열에 기본값이 적용된 레코드를 삽입할 수 있습니다.

INSERT INTO bang
(cot1, cot2, ...)
DEFAULT VALUES;

다중 레코드 삽입

여러 개의 레코드를 한 번에 삽입하려면 서브쿼리(SELECT)를 활용하는 방식을 사용합니다.

INSERT INTO bang
(cot1, cot2, ...)
SELECT bieuthuc1, bieuthuc2, ...
FROM bang_nguon
[WHERE dieukien];

TOP 절을 포함한 전체 문법은 다음과 같습니다.

INSERT [TOP (giatri_dau) [PERCENT]]
INTO bang
(cot1, cot2, ...)
SELECT bieuthuc1, bieuthuc2, ...
FROM bang_nguon
[WHERE dieukien];

매개변수 및 키워드 설명

  • bang: 레코드를 삽입할 대상 테이블입니다.
  • cot1, cot2, ...: 값을 삽입할 테이블의 열(컬럼) 목록입니다.
  • bieuthuc1, bieuthuc2, ...: 각 열에 지정할 값입니다. cot1에는 bieuthuc1이, cot2에는 bieuthuc2가 할당됩니다.
  • TOP (giatri_dau): 선택 사항입니다. 지정하면 결과 집합에서 앞에서부터 giatri_dau에 해당하는 행 수만큼만 삽입합니다. 예를 들어 TOP (10)은 첫 10개 행을 삽입합니다.
  • PERCENT: 선택 사항입니다. 지정하면 giatri_dau를 백분율로 해석하여 해당 비율만큼의 행을 삽입합니다. 예를 들어 TOP (10) PERCENT는 결과 집합의 상위 10%를 삽입합니다.
  • bang_nguon: 다른 테이블에서 데이터를 가져올 때 사용되는 원본 테이블입니다.
  • WHERE dieukien: 선택 사항입니다. 레코드가 삽입되기 위해 충족해야 하는 조건을 지정합니다.

사용 시 주의사항

  1. INSERT 문으로 레코드를 삽입할 때는 NOT NULL로 설정된 열에 반드시 값을 제공해야 합니다.
  2. NULL 값을 허용하는 열이라면 INSERT 문에서 해당 열을 생략할 수 있습니다.

예제 1: VALUES 키워드 사용하기

다음은 VALUES 키워드를 사용해 직원 테이블(nhanvien)에 레코드 하나를 삽입하는 기본 예제입니다.

INSERT INTO nhanvien
(nhanvien_id, ho, ten)
VALUES
(10, 'Anderson', 'Sarah');

이 INSERT 문이 실행되면 테이블에 레코드 1개가 추가됩니다. 추가된 레코드는 직원 ID가 10이고, 성은 Anderson, 이름은 Sarah입니다.

여러 레코드 동시에 삽입하기

VALUES 키워드는 한 번의 실행으로 여러 레코드를 삽입할 때도 사용할 수 있습니다.

INSERT INTO nhanvien
(nhanvien_id, ho, ten)
VALUES
(10, 'Anderson', 'Sarah'),
(11, 'Johnson', 'Dale');

위 예제에서는 레코드 2개가 한 번에 삽입됩니다. 첫 번째 레코드는 직원 ID가 10이고 Anderson 성의 Sarah이며, 두 번째 레코드는 직원 ID가 11이고 Johnson 성의 Dale입니다.

이 구문은 아래의 두 개 INSERT 문을 실행한 것과 동일한 결과를 만듭니다.

INSERT INTO nhanvien
(nhanvien_id, ho, ten)
VALUES
(10, 'Anderson', 'Sarah');
INSERT INTO nhanvien
(nhanvien_id, ho, ten)
VALUES
(11, 'Johnson', 'Dale');

예제 2: DEFAULT VALUES 키워드 사용하기

INSERT INTO nhanvien
(nhanvien_id, ho, ten)
DEFAULT VALUES;

이 INSERT 문은 테이블에 레코드 하나를 삽입하며, 새 레코드의 직원 ID, 성, 이름 필드에는 각각 정의된 기본값(default)이 적용됩니다.

예제 3: SELECT 문과 함께 사용하기

INSERT 문에 SELECT 문을 결합하면 더 복잡하고 강력한 삽입 작업을 수행할 수 있습니다.

INSERT INTO danhba
(danhba_id, ho, ten)
SELECT nhanvien_id, ho, ten
FROM nhanvien
WHERE nhanvien_id <= 100;

INSERT 문 안에 SELECT 문을 배치하면 여러 레코드를 한 번에 빠르게 삽입할 수 있습니다. 이 방식은 테이블 간 데이터 복사나 대량 이관 작업에 특히 유용합니다.

삽입 전 행 수 미리 확인하기

이러한 방식으로 데이터를 삽입할 때는 실제 삽입될 행의 개수를 미리 파악하는 것이 좋습니다. 삽입 전에 SELECT COUNT(*)를 실행하면 삽입될 레코드 수를 확인할 수 있습니다.

SELECT COUNT (*)
FROM nhanvien
WHERE nhanvien_id <= 100;

이처럼 SQL Server의 INSERT 문은 단순한 단일 레코드 삽입부터 SELECT를 활용한 대량 데이터 삽입까지 다양한 상황에 맞게 활용할 수 있습니다. 각 문법의 특징을 이해하고 상황에 맞는 방식을 선택하면 데이터 처리 효율을 크게 높일 수 있습니다.