Контакти

Transact-SQL - вставка даних. SQL запит INSERT INTO - наповнити базу даних інформацією Sql запити insert

У попередніх розділах ми розглядали роботу з отримання даних з заздалегідь створених таблиць. Тепер пора розібрати, яким же чином ми можемо створювати / видаляти таблиці, додавати нові записи і видаляти старі. Для цих цілей в SQL існують такі оператори, як: CREATE - створює таблицю, ALTER - змінює структуру таблиці, DROP - видаляє таблицю або поле, INSERT - додає дані в таблицю. Почнемо знайомство з цією групою операторів з оператора INSERT.

1. Додавання цілих рядків

Як видно з назви, оператор INSERT використовується для вставки (додавання) рядків в таблицю бази даних. Додавання можна здійснити кількома способами:

  • - додати одну повну рядок
  • - додати частину рядка
  • - додати результати запиту.

Отже, щоб додати новий рядок в таблицю, нам необхідно вказати назву таблиці, перерахувати назви колонок і вказати значення для кожної колонки за допомогою конструкції INSERT INTO названіе_табліци (поле1, поле2 ...) VALUES (Значення1, значення2 ...). Розглянемо на прикладі.

INSERT INTO Sellers (ID, Address, City, Seller_name, Country) VALUES ( "6", "1st Street", "Los Angeles", "Harry Monroe", "USA")

Також можна змінювати порядок зазначення назв колонок, проте одночасно потрібно міняти і порядок значень в параметрі VALUES.

2. Додавання частини рядків

У попередньому прикладі при використанні оператора INSERT ми явно відзначали імена стовпців таблиці. Використовуючи даний синтаксис, ми можемо пропустити деякі стовпці. Це означає, що ви вводите значення для одних стовпців але не пропонуєте їх для інших. наприклад:

INSERT INTO Sellers (ID, City, Seller_name) VALUES ( "6", "Los Angeles", "Harry Monroe")

В даному прикладі ми не вказали значення для двох стовпців Address і Country. Ви можете виключати деякі стовпці з оператора INSERT INTO, Якщо це дозволяє виробляти визначення таблиці. В цьому випадку необхідно дотримуватися одна з умов: цей стовпець визначений як допускає значення NULL (Відсутність будь-якого значення) або в визначення таблиці вказане значення за замовчуванням. Це означає, що, якщо не вказано ніякого значення, буде використано значення за замовчуванням. Якщо ви пропускаєте стовпець таблиці, яка не допускає появи в своїх рядках значень NULL і не має значення, визначеного для використання за замовчуванням, СУБД видасть повідомлення про помилку, і це рядок не буде додана.

3. Додавання відібраних даних

У попередній прикладах ми вставляли дані в таблиці, прописуючи їх вручну в запиті. Однак оператор INSERT INTO дозволяє автоматизувати цей процес, якщо ми хочемо вставляти дані з іншої таблиці. Для цього в SQL існує така Кострукцій як INSERT INTO ... SELECT .... Дана конструкція дозволяє одночасно вибирати дані з однієї таблиці, і вставити їх в іншу. Припустимо ми маємо ще одну таблицю Sellers_EU з переліком продавців нашого товару в Європі і нам потрібно їх додати в загальну таблицю Sellers. Структура цих таблиць однакова (то ж кількість колонок і ті ж їх назви), однак інші дані. Для цього ми можемо прописати наступний запит:

INSERT INTO Sellers (ID, Address, City, Seller_name, Country) SELECTID, Address, City, Seller_name, Country FROM Sellers_EU

Потрібно звернути увагу, щоб значення внутрішніх ключів не повторювалися (поле ID), В іншому випадку відбудеться помилка. оператор SELECT також може включати пропозиції WHERE для фільтрації даних. Також слід зазначити, що СУБД не звертає уваги на назви колонок, які містяться в операторі SELECT, Для неї важливо лише порядок їхнього розташування. Тому дані в першому зазначеному стовпці, що були обрані з-за SELECT, Будуть в будь-якому випадку заповнені в перший стовпець таблиці Sellers, Зазначеної після оператора INSERT INTO, Незалежно від назви поля.

4. Копіювання даних з однієї таблиці в іншу

Часто при роботі з базами даних виникає необхідність в створенні копій будь-яких таблиць, з метою резервування або модифікації. Щоб зробити повну копію таблиці в SQL передбачений окремий оператор SELECT INTO. Наприклад, нам потрібно створити копію таблиці Sellers, Потрібно буде прописати запит наступним чином:

SELECT * INTO Sellers_new FROM Sellers

На відміну від попередньої конструкції INSERT INTO ... SELECT ..., Коли дані додаються в існуючу таблицю, конструкція копіює дані в нову таблицю. Також можна сказати, що перша конструкція імпортує дані, а друга - експортує. При використанні конструкції SELECT ... INTO ... FROM ... слід враховувати наступне:

  • - можна використовувати будь-які пропозиції в операторі SELECT, такі як GROUP BY і HAVING
  • - для додавання даних з декількох таблиць можна використовувати об'єднання
  • - дані можливо додати тільки одну таблицю, незалежно від того, зі скількох таблиць вони були взяті.

Ця інструкція додає одну або кілька записів в таблицю (виконує запит на додавання).

синтаксис

Запит на додавання декількох записів:

INSERT INTO конечний_об'ект [(поле1[, поле2[, ...]])]
SELECT [ джерело.]поле1[, поле2[, ...]
FROM вираженіе_табліци

Запит на додавання одного запису:

INSERT INTO конечний_об'ект [(поле1[, поле2[, ...]])]
VALUES ( поле1[, поле2[, ...])

Інструкція INSERT INTO складається з наступних елементів:

частина

опис

конечний_об'ект

Ім'я таблиці або запиту, куди додаються записи.

поле1, поле2

після аргументу конечний_об'ект - імена полів, в які додаються дані; після аргументу джерело - імена полів, з яких беруться дані.

внешняя_база_данних

Шлях до зовнішньої базі даних. Опис шляху см. В статті, присвяченій пропозицією IN.

джерело

Ім'я таблиці або запиту, звідки копіюються записи.

вираженіе_табліци

Одне або декілька імен таблиць, з яких потрібно отримати записи. Цей аргумент може являти собою ім'я окремої таблиці, результуюче вираз, складене з використанням операцій INNER JOIN, LEFT JOIN або RIGHT JOIN, або збережений запит.

значення1, значення2

Значення, які будуть додані в певні поля нового запису. Кожне значення вставляється в поле, відповідне його становищу в списку: значення1 додається в поле1 нового запису, значення2 - в поле2 і т. д. Необхідно розділяти значення коми і укладати текстові поля в лапки ( "").

зауваження

За допомогою інструкції INSERT INTO можна додати в таблицю одну запис, використовуючи зазначений вище синтаксис. В цьому випадку вказуються імена і значення для кожного поля запису. Необхідно вказати всі поля запису, яким присвоюються значення, і відповідні значення. Якщо не вказати значення поля, йому буде присвоєно значення за замовчуванням або NULL. Записи додаються в кінець таблиці.

Інструкцією INSERT INTO можна також скористатися для додавання набору записів з іншої таблиці або запиту за допомогою пропозиції SELECT ... FROM, як показано вище (див. Синтаксис запиту на додавання декількох записів). У цьому випадку пропозиція SELECT задає поля для додавання в зазначений конечний_об'ект.

джерело або конечний_об'ект може бути таблицею або запитом. Якщо заданий запит, ядро \u200b\u200bСУБД Microsoft Access додає записи до всіх таблиць, які він повертає.

Використання інструкції INSERT INTO не є обов'язковим. Якщо вона вказана, вона повинна передувати інструкції SELECT.

Якщо кінцева таблиця містить первинний ключ, переконайтеся, що значення, що додаються в одне або кілька полів первинного ключа, унікальні і відмінні від NULL; в іншому випадку записі не будуть додані.

Якщо записи додаються в таблицю з полем "Лічильник" і ви хочете змінити їх нумерацію, не вмикайте поле "Лічильник" в запит. Увімкніть поле "Лічильник" в запит, якщо ви хочете зберегти початкові значення з поля.

Додати записи в таблицю іншої бази даних можна за допомогою пропозиції IN.

Щоб створити таблицю, використовуйте інструкцію SELECT ... INTO для отримання запиту на створення таблиці.

Перед тим як виконати запит на додавання, скористайтеся запитом на вибірку з такими ж умовами відбору, щоб за отриманими результатами визначити, які записи будуть додані.

Запит на додавання копіює записи з однієї або декількох таблиць в іншу таблицю. При цьому таблиці, що містять додаються записи, залишаються без змін.

Замість додавання записів з іншої таблиці можна задати значення кожного поля в окремій нового запису за допомогою пропозиції VALUES. Якщо список полів опущений, в пропозиція VALUES необхідно включити відповідні значення кожного поля таблиці; в іншому випадку операція INSERT нічого очікувати виконано. Скористайтеся інструкцією INSERT INTO разом з пропозицією VALUES для кожної додаткової записи, яку потрібно створити.

Останнє оновлення: 13.07.2017

Для додавання даних застосовується команда INSERT, яка має наступний формальний синтаксис:

INSERT ім'я_таблиці [(спісок_столбцов)] VALUES (значення1, значення2, ... значеніеN)

Спочатку йде вираз INSERT INTO, потім в дужках можна вказати список стовпців через кому, в які треба додавати дані, і в кінці після слова VALUES дужках перераховують додаються для стовпців значення.

Наприклад, нехай раніше була створена наступна база даних:

CREATE DATABASE productsdb; GO USE productsdb; CREATE TABLE Products (Id INT IDENTITY PRIMARY KEY, ProductName NVARCHAR (30) NOT NULL, Manufacturer NVARCHAR (20) NOT NULL, ProductCount INT DEFAULT 0, Price MONEY NOT NULL)

Додамо в неї один рядок за допомогою команди INSERT:

INSERT Products VALUES ( "iPhone 7", "Apple", 5, 52000)

Після вдалого виконання в SQL Server Management Studio в поле повідомлень повинно з'явитися повідомлення "1 row (s) affected":

Варто враховувати, що значення для стовпців в дужках після ключового слова VALUES передаються по порядку їх оголошення. Наприклад, в вираженні CREATE TABLE вище можна побачити, що першим стовпцем йде Id. Але так як для нього заданий атрибут IDENTITY, то значення цього стовпця автоматично генерується, і його можна не вказувати. Другий стовпець представляє ProductName, тому перше значення - рядок "iPhone 7" буде передано саме цього стовпцю. Друге значення - рядок "Apple" буде передана третій стовпці Manufacturer і так далі. Тобто значення передаються стовпцями наступним чином:

    ProductName: "iPhone 7"

    Manufacturer: "Apple"

Також при введенні значень можна вказати безпосередні стовпці, в які будуть додаватися значення:

INSERT INTO Products (ProductName, Price, Manufacturer) VALUES ( "iPhone 6S", 41000, "Apple")

Тут значення вказується тільки для трьох стовпців. Причому тепер значення передаються в порядку проходження стовпців:

    ProductName: "iPhone 6S"

    Manufacturer: "Apple"

Для невказаних стовпців (в даному випадку ProductCount) буде додаватися значення за замовчуванням, якщо заданий атрибут DEFAULT, або значення NULL. При цьому не вказані стовпці повинні допускати значення NULL або мати атрибут DEFAULT.

Також ми можемо додати відразу кілька рядків:

INSERT INTO Products VALUES ( "iPhone 6", "Apple", 3, 36000), ( "Galaxy S8", "Samsung", 2, 46000), ( "Galaxy S8 Plus", "Samsung", 1, 56000)

В даному випадку в таблицю будуть додані три рядки.

Також при додаванні ми можемо вказати, щоб для стовпця використовувалося значення за замовчуванням за допомогою ключового слова DEFAULT або значення NULL:

INSERT INTO Products (ProductName, Manufacturer, ProductCount, Price) VALUES ( "Mi6", "Xiaomi", DEFAULT, 28000)

В даному випадку для стовпця ProductCount буде використано значення за замовчуванням (якщо воно встановлено, якщо його немає - то NULL).

Якщо всі стовпці мають атрибут DEFAULT, що визначає значення за замовчуванням, або допускають значення NULL, то можна для всіх стовпців вставити значення за замовчуванням:

INSERT INTO Products DEFAULT VALUES

Але якщо брати таблицю Products, то подібна команда завершиться з помилкою, так як кілька полів не мають атрибута DEFAULT і при цьому не допускають значення NULL.

Інструкція SQL INSERT INTO і INSERT SELECT використовуються для вставки нових рядків у таблицю. Існує два способи використання інструкцій:

  1. Тільки значення: Перший метод передбачає зазначення тільки значень даних, які потрібно вставити без імен стовпців.

синтаксис:

INSERT INTO ім'я_таблиці VALUES (значення1, значення2, значеніє3, ...); ім'я_таблиці: ім'я таблиці. значення1, значення2, ..: значення першого стовпчика, другого шпальти, ... для нового запису

  1. Імена стовпців і значення: При другому методі вказуються імена стовпців і значення рядків для вставки:

синтаксис:

INSERT INTO ім'я_таблиці (столбец1, столбец2, столбец3, ..) VALUES (значення1, значення2, значеніє3, ...); ім'я_таблиці: ім'я таблиці. столбец1: ім'я першого стовпці, другого шпальти ... значення1, значення2, ..: значення першого стовпчика, другого шпальти, ... для нового запису

запити:

Спосіб 1 ( вставка тільки значень):

INSERT INTO Student VALUES ( "5", "HARSH", "WEST BENGAL", "8759770477", "19");

результат:

Після використання INSERT INTO SELECT таблиця Student тепер буде виглядати наступним чином:

ROLL_NO NAME ADDRESS PHONE Age
1 Ram Delhi 9455123451 18
2 RAMESH GURGAON 9562431543 18
3 SUJIT ROHTAK 9156253131 20
4 SURESH Delhi 9156768971 18
3 SUJIT ROHTAK 9156253131 20
2 RAMESH GURGAON 9562431543 18
5 HARSH WEST BENGAL 8759770477 19

Спосіб 2 ( вставка значень тільки в зазначені стовпці):

INSERT INTO Student (ROLL_NO, NAME, Age) VALUES ( "5", "PRATIK", "19");

результат:

Таблиця Student тепер буде виглядати наступним чином:

ROLL_NO NAME ADDRESS PHONE Age
1 Ram Delhi 9455123451 18
2 RAMESH GURGAON 9562431543 18
3 SUJIT ROHTAK 9156253131 20
4 SURESH Delhi 9156768971 18
3 SUJIT ROHTAK 9156253131 20
2 RAMESH GURGAON 9562431543 18
5 PRATIK null null 19

Зверніть увагу, що для стовпців, значення для яких не вказані, задається null.

Використання SELECT в інструкції INSERT INTO

Можна використовувати інструкцію MySQL INSERT SELECT для копіювання рядків з однієї таблиці і їх вставки в іншу.

Використання цього оператора аналогічно використанню INSERT INTO. Різниця в тому, що оператор SELECT застосовується для вибірки даних з іншої таблиці. Нижче наведені різні способи використання INSERT INTO SELECT:

  • Вставка всіх стовпців таблиці: Можна скопіювати всі дані таблиці і вставити їх в іншу таблицю.

синтаксис:

INSERT INTO первая_табліца SELECT * FROM вторая_табліца; первая_табліца: ім'я першої таблиці. вторая_табліца: ім'я другої таблиці.

Ми використовували інструкцію SELECT для копіювання даних з однієї таблиці та інструкцію INSERT INTO для їх вставки в іншу.

  • Вставка окремих стовпців таблиці. Ви маєте можливість копіювати тільки ті стовпці таблиці, які необхідно вставити в іншу таблицю.

синтаксис:

INSERT INTO первая_табліца (імена_столбцов1) SELECT імена_столбцов2 FROM вторая_табліца; первая_табліца: ім'я першої таблиці. вторая_табліца: ім'я другої таблиці. імена_столбцов1: імена стовпців, розділені комою (,) для таблиці 1. імена_столбцов2: імена стовпців, розділені комою (,) для таблиці 2.

Ми використовували інструкцію SELECT для копіювання даних тільки з обраних стовпців другої таблиці та інструкцію MySQL INSERT INTO SELECT для їх вставки в першу таблицю.

  • Копіювання певних рядків з таблиці. Ви маєте можливість копіювати певні рядки з таблиці для подальшої вставки в іншу таблицю за допомогою умови WHERE з оператором SELECT. В цьому випадку потрібно використовувати відповідне умова в WHERE.

синтаксис:

Таблиця 2: LateralStudent

ROLL_NO NAME ADDRESS PHONE Age
7 SOUVIK DUMDUM 9876543210 18
8 NIRAJ NOIDA 9786543210 19
9 SOMESH ROHTAK 9687543210 20

запити:

Спосіб 1 ( вставка всіх рядків і стовпців):

INSERT INTO Student SELECT * FROM LateralStudent;

результат:

Цей запит вставить всі дані таблиці LateralStudent в таблицю Student. Після застосування SQL INSERT INTO SELECT таблиця Student буде виглядати наступним чином:

ROLL_NO NAME ADDRESS PHONE Age
1 Ram Delhi 9455123451 18
2 RAMESH GURGAON 9562431543 18
3 SUJIT ROHTAK 9156253131 20
4 SURESH Delhi 9156768971 18
3 SUJIT ROHTAK 9156253131 20
2 RAMESH GURGAON 9562431543 18
7 SOUVIK DUMDUM 9876543210 18
8 NIRAJ NOIDA 9786543210 19
9 SOMESH ROHTAK 9687543210 20

Спосіб 2 ( вставка окремих стовпців):

INSERT INTO Student (ROLL_NO, NAME, Age) SELECT ROLL_NO, NAME, Age FROM LateralStudent;

результат:

Цей запит вставить дані зі стовпців ROLL_NO, NAME і Age таблиці LateralStudent в таблицю Student. Для інших стовпців таблиці Student буде задано значення null. Після застосування SQL INSERT SELECT таблиця буде виглядати наступним чином:

ROLL_NO NAME ADDRESS PHONE Age
1 Ram Delhi 9455123451 18
2 RAMESH GURGAON 9562431543 18
3 SUJIT ROHTAK 9156253131 20
4 SURESH Delhi 9156768971 18
3 SUJIT ROHTAK 9156253131 20
2 RAMESH GURGAON 9562431543 18
7 SOUVIK Null null 18
8 NIRAJ Null null 19
9 SOMESH Null null 20
  • Вибір певних рядків для вставки:

результат:

Цей запит вибере тільки перший рядок з таблиці LateralStudent для вставки в таблицю Student. Після застосування INSERT SELECT таблиця буде виглядати наступним чином.

За допомогою SQL можна скопіювати інформацію з однієї таблиці в іншу.

INSERT INTO SELECT, заяву копіює дані з однієї таблиці і вставляє його в існуючу таблицю.

Заява SQL INSERT INTO SELECT,

INSERT INTO SELECT, оператор вибирає дані з однієї таблиці і вставляє його в існуючу таблицю. Будь-які існуючі рядки в цільовій таблиці не змінюються.

SQL INSERT INTO SELECT, Синтаксис

Ми можемо скопіювати всі стовпці з однієї таблиці в іншу, існуючу таблицю:

INSERT INTO table2
SELECT * FROM table1;

Або ж ми можемо скопіювати тільки ті стовпці, які ми хочемо в іншу, існуючу таблицю:

INSERT INTO table2
(Column_name (s))
SELECT column_name (s)
FROM table1;

Демо-версія бази даних

У цьому уроці ми будемо використовувати добре відому базу даних Борей.

Нижче наводиться добірка з "Customers" таблиці:

Призначений для користувача ВД ім'я Клієнта Контактна особа Адреса Місто Поштовий індекс Країна
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitucion 2222 Mexico D.F. 05021 Mexico
3 Antonio Moreno Taqueria Antonio Moreno Mataderos 2312 Mexico D.F. 05023 Mexico

І вибір з "Suppliers" таблиці:

SQL INSERT INTO SELECT, Приклади

Копіювання тільки декілька стовпців з "Suppliers" Into "Customers":

Копіювання тільки німецьких постачальників в "Customers".



Сподобалася стаття? поділіться їй