Database/SQL

INSERT

Riz.Dev 2023. 3. 16. 16:00

SQL : INSERT 문


이 SQL 튜토리얼에서는 구문, 예제 및 연습 문제를 통해 SQL INSERT 문을 사용하는 방법을 설명합니다.

설명

SQL INSERT 문은 테이블에 하나 이상의 레코드를 삽입하는 데 사용됩니다. INSERT 문에는 하나의 레코드를 삽입하는지 여러 레코드를 삽입하는지에 따라 두 가지 구문이 있습니다.

INSERT

구문

SQL에서 단일 레코드를 삽입할 때 INSERT 문의 구문은 다음과 같습니다.

INSERT INTO table
(column1, column2, ... )
VALUES
(expression1, expression2, ... );

또는 SQL에서 여러 레코드를 삽입할 때 INSERT 문의 구문은 다음과 같습니다.

INSERT INTO table
(column1, column2, ... )
SELECT expression1, expression2, ...
FROM source_tables
[WHERE conditions];

매개변수 및 인수

table(테이블)

  • 레코드를 삽입할 테이블입니다.

column1, column2

  • 값을 삽입할 테이블의 열입니다.

expression1, expression2

  • 테이블의 열에 할당할 값입니다. 따라서 column1에는 expression1의 값을 할당하고 column2에는 expression2의 값을 할당하는 식으로 할당할 수 있습니다.

source_tables

  • 다른 테이블에서 레코드를 삽입할 때 사용됩니다. 삽입을 수행할 때 소스 테이블입니다.

WHERE conditions(WHERE 조건)

  • 선택 사항입니다. 다른 테이블에서 레코드를 삽입할 때 사용합니다. 삽입할 레코드가 충족되어야 하는 조건입니다.

참고

  • SQL INSERT 문을 사용하여 테이블에 레코드를 삽입할 때는 모든 NOT NULL 열에 대해 값을 제공해야 합니다. 열이 NULL 값을 허용하는 경우에만 INSERT 문에서 열을 생략할 수 있습니다.

DDL/DML 예제

튜토리얼을 따라 하려면 테이블을 생성하는 DDL과 데이터를 채우는 DML을 받으세요. 그런 다음 자신의 데이터베이스에서 예제를 사용해 보세요!

DDL/DML 받기


예제 - INSERT 문을 사용하여 하나의 레코드 삽입하기

INSERT 문을 사용하는 가장 간단한 방법은 VALUES 키워드를 사용하여 테이블에 하나의 레코드를 삽입하는 것입니다. SQL에서 이 작업을 수행하는 방법에 대한 예를 살펴보겠습니다.

이 예제에서는 다음과 같은 데이터가 포함된 categories라는 테이블이 있습니다.

category_id category_name
25 Deli
50 Produce
75 Bakery
100 General Merchandise
125 Technology

새 카테고리 레코드를 삽입해 보겠습니다. 다음 SQL 문을 입력합니다. Try it

INSERT INTO categories
(category_id, category_name)
VALUES
(150, 'Miscellaneous');

레코드 1개가 삽입됩니다. categories 테이블에서 데이터를 다시 선택합니다.

SELECT * FROM categories;

다음은 표시되는 결과입니다.

category_id category_name
25 Deli
50 Produce
75 Bakery
100 General Merchandise
125 Technology
150 Miscellaneous

이 예제에서는 categories 테이블에 레코드 하나를 삽입합니다. 이 새 레코드의 category_id는 150이고 category_name은 'Miscellaneous'입니다.

이 예제에서는 categories 테이블의 모든 열에 대한 값을 제공하므로 열 이름을 생략하고 대신 다음과 같이 INSERT 문을 작성할 수 있습니다. Try it

INSERT INTO categories
VALUES
(150, 'Miscellaneous');

그러나 이 작업은 두 가지 이유로 위험합니다. 첫째, categories 테이블에 추가 열이 추가되면 INSERT 문에 오류가 발생합니다. 둘째, 테이블에서 열의 순서가 변경되면 데이터가 잘못된 열에 삽입됩니다. 따라서 일반적으로 INSERT 문에 열 이름을 나열하는 것이 좋습니다.


예제 - INSERT 문을 사용하여 여러 레코드 삽입하기

INSERT 문 안에 SELECT 문을 배치하면 여러 개의 삽입을 빠르게 수행할 수 있습니다. 이를 수행하는 방법에 대한 예를 살펴보겠습니다.

이 예제에는 다음과 같은 데이터가 있는 employees라는 테이블이 있습니다.

employee_number last_name first_name salary dept_id
1001 Smith John 62000 500
1002 Anderson Jane 57500 500
1003 Everest Brad 71000 501
1004 Horvath Jack 42000 501

그리고 다음 데이터가 있는 customers라는 테이블이 있습니다.

customer_id last_name first_name favorite_website
4000 Jackson Joe techonthenet.com
5000 Smith Jane digminecraft.com
6000 Ferguson Samantha bigactivities.com
7000 Reynolds Allen checkyourmath.com
8000 Anderson Paige NULL
9000 Johnson Derek techonthenet.com

이제 customers 테이블에 일부 직원 정보를 삽입해 보겠습니다. Try it

INSERT INTO customers
(customer_id, last_name, first_name)
SELECT employee_number AS customer_id, last_name, first_name
FROM employees
WHERE employee_number < 1003;

팁: 이 유형의 INSERT를 사용하는 일부 데이터베이스에서는 삽입하려는 테이블의 열 이름과 일치하도록 SELECT의 열 이름에 별칭을 지정해야 합니다. 위의 예에서 볼 수 있듯이 SELECT 문의 첫 번째 열을 customer_id로 별칭을 지정했습니다.

2개의 레코드가 삽입됩니다. customers 테이블에서 데이터를 다시 선택합니다.

SELECT * FROM customers;

다음은 표시되는 결과입니다.

customer_id last_name first_name favorite_website
4000 Jackson Joe techonthenet.com
5000 Smith Jane digminecraft.com
6000 Ferguson Samantha bigactivities.com
7000 Reynolds Allen checkyourmath.com
8000 Anderson Paige NULL
9000 Johnson Derek techonthenet.com
1001 Smith John NULL
1002 Anderson Jane NULL

이 예제에서는 employees 테이블의 데이터를 사용하여 customers 테이블의 마지막 2개 레코드가 삽입되었습니다.

이러한 유형의 삽입에서는 삽입되는 행 수를 확인해야 할 수 있습니다. 삽입을 수행하기 전에 SELECT 문에서 COUNT(*)를 실행하여 삽입할 행 수를 확인할 수 있습니다. 예를 들면 다음과 같습니다. Try it

SELECT COUNT(*)
FROM employees
WHERE employee_number < 1003;

INSERT 문을 실행할 때 삽입될 레코드 수를 반환합니다.

COUNT(*)
2

자주 묻는 질문

  • 질문 : 클라이언트가 있는 데이터베이스를 설정하고 있습니다. 데이터베이스에 정보를 삽입할 때 SQL INSERT 문을 사용한다는 것을 알고 있는데 동일한 클라이언트 정보를 다시 입력하지 않으려면 어떻게 해야 하나요?
  • 답변: SQL EXISTS 조건을 사용하여 중복 정보를 삽입하지 않도록 할 수 있습니다.

예를 들어, 기본 키가 client_id인 clients라는 테이블이 있는 경우 다음 SQL INSERT 문을 사용할 수 있습니다.

INSERT INTO clients
(client_id, client_name, client_type)
SELECT supplier_id AS client_id, supplier_name AS client_name, 'advertising' AS client_type
FROM suppliers
WHERE NOT EXISTS (SELECT *
                  FROM clients
                  WHERE clients.client_id = suppliers.supplier_id);

이 SQL INSERT 문은 하위 선택이 있는 여러 레코드를 삽입합니다.

단일 레코드를 삽입하려는 경우 다음 SQL INSERT 문을 사용할 수 있습니다:

INSERT INTO clients
(client_id, client_name, client_type)
SELECT 10345, 'IBM', 'advertising'
FROM dual
WHERE NOT EXISTS (SELECT *
                  FROM clients
                  WHERE clients.client_id = 10345);

이중 테이블을 사용하면 값이 현재 테이블에 저장되어 있지 않더라도 SELECT 문에 값을 입력할 수 있습니다.


연습 문제

SQL INSERT 문을 사용하여 실력을 테스트하고 싶다면 몇 가지 연습 문제를 풀어보세요.

이 연습을 통해 INSERT 문으로 실력을 시험해 볼 수 있습니다. 풀어야 하는 문제가 주어집니다. 각 연습이 끝나면 정답을 확인할 수 있도록 솔루션을 제공합니다. 한번 도전해 보세요!

연습 문제로 이동


< 이전 / 다음 : UPDATE >