메뉴 닫기

MSSQL INSERT 문 기본 사용법과 실전 예제

💾 MSSQL INSERT 문 기본 사용법과 실전 예제

📌 테이블에 새로운 데이터를 정확하고 효율적으로 추가하는 방법을 배워보세요

데이터베이스 작업을 하다 보면 가장 기본적이면서도 자주 사용되는 명령 중 하나가 바로 INSERT 문입니다.
이 명령은 테이블에 새로운 데이터를 추가할 때 활용되며, 전 컬럼을 한 번에 채울 수도 있고 필요한 컬럼만 선택적으로 지정할 수도 있습니다.
특히 MSSQL 환경에서는 문법이 비교적 직관적이지만, 초보자의 경우 컬럼 순서나 데이터 타입 불일치로 인해 오류를 겪는 경우가 많습니다.
이 글에서는 INSERT 문의 기본 구조부터 다양한 활용 예시까지, 실제 업무 환경에서 바로 적용할 수 있도록 단계별로 설명합니다.

또한 단순한 문법 설명을 넘어, 효율적인 데이터 입력을 위한 팁과 주의해야 할 사항까지 함께 다룹니다.
예를 들어, 전체 컬럼을 채울 때와 일부 컬럼만 채울 때의 차이, NULL 허용 여부, DEFAULT 값 처리 방식 등을 살펴봅니다.
MSSQL을 처음 접하는 분들이라도 이 글을 통해 INSERT 문을 자유롭게 다룰 수 있게 될 것입니다.



💾 MSSQL INSERT 문이란?

MSSQL의 INSERT 문은 데이터베이스의 테이블에 새로운 행(row)을 추가할 때 사용하는 기본 SQL 명령어입니다.
이 명령을 통해 원하는 데이터를 각 컬럼에 맞게 입력할 수 있으며, 한 번에 하나의 행을 추가하거나 여러 행을 동시에 추가하는 것도 가능합니다.
실제 업무에서는 회원 가입 시 신규 사용자 정보를 저장하거나, 주문 발생 시 주문 내역을 기록하는 등 다양한 상황에서 사용됩니다.

INSERT 문은 크게 두 가지 형태로 나뉩니다.
하나는 전체 컬럼에 대한 값을 지정하는 방식이고, 다른 하나는 일부 컬럼만 지정하여 나머지는 DEFAULT 값이나 NULL로 처리하는 방식입니다.
이를 통해 불필요한 데이터 입력을 줄이고, 테이블 구조에 맞춘 유연한 데이터 삽입이 가능합니다.

CODE BLOCK
-- 전체 컬럼에 데이터 삽입
INSERT INTO Users (UserID, UserName, Email, CreatedDate)
VALUES (1, '홍길동', 'hong@example.com', GETDATE());

-- 일부 컬럼만 데이터 삽입 (나머지는 DEFAULT 또는 NULL 적용)
INSERT INTO Users (UserName, Email)
VALUES ('김철수', 'kim@example.com');

위 예시에서 첫 번째 구문은 Users 테이블의 모든 컬럼에 값을 지정한 경우이며, 두 번째 구문은 필수 컬럼만 지정하고 나머지는 테이블 정의에 따라 자동 처리되도록 한 경우입니다.

💡 TIP: INSERT 문 사용 시, 컬럼의 순서와 데이터 타입이 일치하지 않으면 오류가 발생하므로 주의해야 합니다.
또한, 컬럼 목록을 명시적으로 지정하는 습관을 들이면 테이블 구조 변경 시에도 안정적으로 동작합니다.

🛠️ 전체 컬럼과 일부 컬럼 삽입 방법

MSSQL에서 INSERT 문을 사용할 때는 상황에 따라 전체 컬럼을 지정할 수도 있고, 필요한 일부 컬럼만 지정할 수도 있습니다.
전체 컬럼 지정은 모든 필드에 값을 입력하는 것이고, 일부 컬럼 지정은 나머지 필드를 DEFAULT 값이나 NULL로 처리하는 방식입니다.
두 방법 모두 INSERT 문법의 기본 구조는 동일하지만, 컬럼 지정 여부와 입력 데이터의 수에서 차이가 있습니다.

📌 전체 컬럼 삽입

전체 컬럼 삽입은 테이블 구조에 정의된 모든 컬럼을 빠짐없이 지정하고, 각 컬럼에 해당하는 값을 순서대로 입력하는 방식입니다.
컬럼 목록을 생략할 수도 있지만, 이 경우 반드시 모든 값을 정확한 순서로 제공해야 하며 테이블 구조 변경 시 오류가 발생할 수 있습니다.

CODE BLOCK
-- 전체 컬럼 지정 예시
INSERT INTO Products (ProductID, ProductName, Price, Stock, CreatedDate)
VALUES (101, '무선 마우스', 25000, 50, GETDATE());

📌 일부 컬럼 삽입

일부 컬럼만 지정하는 방식은 불필요한 데이터 입력을 줄이고, 자동으로 채워질 수 있는 값은 데이터베이스의 DEFAULT 설정이나 NULL 값으로 처리하게 됩니다.
이 방법은 특히 입력해야 할 필수 컬럼이 적은 경우 효율적입니다.

CODE BLOCK
-- 일부 컬럼 지정 예시
INSERT INTO Products (ProductName, Price)
VALUES ('유선 키보드', 15000);

💎 핵심 포인트:
컬럼 목록을 항상 명시하면 테이블 구조 변경 시 발생할 수 있는 오류를 예방할 수 있으며, 유지보수 시에도 가독성이 좋아집니다.



⚙️ VALUES 구문과 SELECT 구문 활용

MSSQL에서 INSERT 문은 데이터를 입력할 때 VALUES 구문SELECT 구문을 모두 활용할 수 있습니다.
VALUES는 지정한 값 그대로 입력하는 방식이고, SELECT는 다른 테이블이나 쿼리 결과를 이용해 데이터를 삽입하는 방식입니다.
두 방식은 목적과 상황에 따라 선택하여 사용하게 됩니다.

📌 VALUES 구문

VALUES 구문은 고정된 데이터를 직접 삽입할 때 사용합니다.
한 번의 실행으로 단일 행 또는 여러 행을 삽입할 수 있으며, 테스트 데이터나 고정값 입력에 적합합니다.

CODE BLOCK
-- 단일 행 삽입
INSERT INTO Customers (CustomerName, ContactName, Country)
VALUES ('삼성전자', '김철수', '대한민국');

-- 다중 행 삽입
INSERT INTO Customers (CustomerName, ContactName, Country)
VALUES 
('LG전자', '이영희', '대한민국'),
('Apple', 'John Smith', 'USA');

📌 SELECT 구문

SELECT 구문은 다른 테이블이나 쿼리 결과에서 데이터를 가져와 그대로 삽입할 때 사용합니다.
이 방식은 데이터 마이그레이션, 백업 복원, 또는 조건부 데이터 복사 시 유용합니다.

CODE BLOCK
-- 다른 테이블에서 데이터 복사
INSERT INTO OrdersArchive (OrderID, CustomerID, OrderDate)
SELECT OrderID, CustomerID, OrderDate
FROM Orders
WHERE OrderDate < '2024-01-01';

⚠️ 주의: SELECT 구문을 사용할 때는 데이터 중복을 피하기 위해 WHERE 절을 적절히 사용해야 하며, 컬럼 개수와 데이터 타입이 정확히 일치해야 합니다.

🔌 DEFAULT 값과 NULL 처리

INSERT 문에서 모든 컬럼을 지정하지 않는 경우, 지정하지 않은 컬럼은 테이블 정의에 따라 DEFAULT 값 또는 NULL이 자동으로 입력됩니다.
이 기능을 잘 활용하면 불필요한 데이터 입력을 줄이고, 데이터베이스 설계의 유연성을 높일 수 있습니다.

📌 DEFAULT 값 처리

DEFAULT 값은 컬럼이 명시되지 않았을 때 자동으로 입력되는 값입니다.
예를 들어, 주문일 컬럼의 DEFAULT 값이 GETDATE()로 설정되어 있다면, 값을 지정하지 않아도 현재 날짜가 입력됩니다.

CODE BLOCK
-- DEFAULT 값 예시
CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    CustomerName NVARCHAR(100),
    OrderDate DATETIME DEFAULT GETDATE()
);

INSERT INTO Orders (OrderID, CustomerName)
VALUES (1, '홍길동'); -- OrderDate에 현재 날짜 자동 입력

📌 NULL 처리

NULL은 데이터가 존재하지 않음을 의미하며, 컬럼이 NULL 허용(Nullable)으로 설정되어 있을 때만 사용할 수 있습니다.
NULL 값은 계산, 비교 연산에서 주의가 필요하며, IS NULL 또는 IS NOT NULL 조건을 사용해 체크할 수 있습니다.

CODE BLOCK
-- NULL 값 예시
INSERT INTO Orders (OrderID, CustomerName, OrderDate)
VALUES (2, '김철수', NULL);

💡 TIP: 컬럼에 DEFAULT 값과 NULL 허용 설정을 적절히 조합하면, 입력 데이터의 일관성을 높이고 삽입 작업을 단순화할 수 있습니다.



💡 INSERT 시 주의할 점과 팁

INSERT 문을 사용할 때는 단순히 데이터를 입력하는 것 외에도 데이터 무결성과 성능에 영향을 줄 수 있는 여러 요소를 고려해야 합니다.
잘못된 데이터 입력은 향후 조회, 통계, 분석 과정에서 오류를 유발할 수 있으므로, 사전에 올바른 작성 방법을 숙지하는 것이 중요합니다.

📌 데이터 타입과 길이 확인

컬럼의 데이터 타입과 길이에 맞지 않는 값을 입력하면 오류가 발생합니다.
예를 들어, NVARCHAR(10) 컬럼에 20자의 문자열을 삽입하면 잘리거나 실패할 수 있습니다.
따라서 데이터 타입과 최대 길이를 사전에 확인하는 것이 좋습니다.

📌 트랜잭션과 롤백 활용

중요한 데이터 입력 작업은 트랜잭션을 사용하여 원자성을 보장해야 합니다.
트랜잭션을 시작하고, 모든 입력이 정상적으로 완료되면 COMMIT, 오류가 발생하면 ROLLBACK을 수행하면 안전합니다.

CODE BLOCK
BEGIN TRANSACTION;

INSERT INTO Accounts (AccountID, AccountName, Balance)
VALUES (101, '테스트 계좌', 100000);

-- 조건에 따라 COMMIT 또는 ROLLBACK
IF @@ERROR = 0
    COMMIT;
ELSE
    ROLLBACK;

📌 중복 데이터 방지

PRIMARY KEY나 UNIQUE 제약 조건을 통해 중복 데이터 입력을 막을 수 있습니다.
또한, INSERT 전에 SELECT로 데이터 존재 여부를 확인하면 불필요한 오류를 줄일 수 있습니다.

💎 핵심 포인트:
INSERT 문 작성 시 컬럼명 명시, 데이터 타입 검증, 트랜잭션 처리, 중복 방지 등을 습관화하면 데이터베이스의 안정성과 성능을 크게 향상시킬 수 있습니다.

자주 묻는 질문 (FAQ)

INSERT 문에서 컬럼 순서를 생략해도 되나요?
컬럼 순서를 생략하면 테이블 정의 순서에 맞게 모든 값을 입력해야 하며, 컬럼이 추가되거나 변경되면 오류가 발생할 수 있습니다. 안정성을 위해 컬럼명을 명시하는 것이 좋습니다.
한 번에 여러 행을 삽입할 수 있나요?
네, VALUES 구문에 여러 행을 나열하거나 SELECT 구문을 사용하여 여러 행을 동시에 삽입할 수 있습니다.
DEFAULT 값은 언제 적용되나요?
컬럼이 DEFAULT 값이 설정되어 있고 INSERT 문에서 해당 컬럼을 지정하지 않은 경우, 자동으로 DEFAULT 값이 입력됩니다.
NULL 값과 빈 문자열은 같은가요?
아니요. NULL은 값이 없음을 의미하고, 빈 문자열은 길이가 0인 문자열 값입니다. 둘은 엄연히 다르며 처리 방식도 다릅니다.
INSERT 시 오류가 발생하면 자동으로 롤백되나요?
자동 롤백은 트랜잭션을 사용해야만 가능합니다. 트랜잭션을 시작하지 않으면 오류 발생 시 해당 쿼리만 실패하고 나머지는 그대로 적용됩니다.
다른 데이터베이스의 데이터를 가져와 삽입할 수 있나요?
네, 링크드 서버(Linked Server) 기능이나 OPENQUERY 등을 이용하면 다른 DB의 데이터를 가져와 INSERT 할 수 있습니다.
INSERT와 UPDATE의 차이는 무엇인가요?
INSERT는 새로운 데이터를 추가하는 명령어이고, UPDATE는 기존 데이터의 값을 수정하는 명령어입니다.
INSERT 시 특정 조건을 만족하는 경우만 데이터를 넣을 수 있나요?
네, SELECT 구문과 WHERE 절을 함께 사용하면 조건을 만족하는 데이터만 삽입할 수 있습니다.

💾 MSSQL INSERT 문 핵심 정리

MSSQL INSERT 문은 데이터베이스 테이블에 새로운 데이터를 추가하는 가장 기본적이면서도 중요한 명령어입니다.
전체 컬럼을 지정하는 방법과 일부 컬럼만 지정하는 방법을 모두 이해하면, 다양한 상황에서 유연하게 데이터를 삽입할 수 있습니다.
VALUES 구문을 사용하면 고정 데이터를 빠르게 입력할 수 있고, SELECT 구문을 활용하면 다른 테이블의 데이터를 조건부로 복사할 수 있습니다.

또한 DEFAULT 값과 NULL 처리 규칙을 숙지하면 입력 작업이 훨씬 간단해지고 오류를 줄일 수 있습니다.
트랜잭션과 롤백 기능을 적절히 활용하면 대량 데이터 입력에서도 안전성을 확보할 수 있으며, PRIMARY KEY나 UNIQUE 제약 조건으로 중복 입력을 방지할 수 있습니다.
정리하자면, INSERT 문은 단순한 데이터 추가 이상의 의미를 가지며, 데이터 무결성과 성능 관리 측면에서 매우 중요한 역할을 합니다.


🏷️ 관련 태그 : MSSQL, INSERT문, 데이터베이스기초, SQL문법, VALUES구문, SELECT삽입, DEFAULT값, NULL처리, 트랜잭션, 데이터무결성