ecosmak.ru

Що таке insert в SQL. SQL INSERT INTO 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 Німеччина
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitucion 2222 Mexico D.F. 05021 Мексика
3 Antonio Moreno Taqueria Antonio Moreno Mataderos 2312 Mexico D.F. 05023 Мексика

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

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

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

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

Команда додає рядки до таблицічи подання основної таблиці.

Синтаксис команди Sql INSERT

Синтаксис команди Insert


Основні ключові слова та параметри команди INSERT
  • schema- ідентифікатор повноважень, що зазвичай збігається з ім'ям деякого користувача
  • table view- ім'я таблиці, в яку рядки мають бути вставлені; якщо зазначено подання, то рядки вставляються до основної таблиці подання
  • subquery_1- підзапит, який сервер обробляє тим самим способом як подання
  • column- стовпець таблиці або подання, в який для кожного вставленого рядка вводиться значення фрази VALUESчи підзапиту; якщо один із стовпців таблиці опускається з цього списку, значенням стовпця для вставленого рядка є значення за умовчанням стовпця, визначене під час створення таблиці. Якщо повністю опускається список стовпця, пропозиція VALUESабо запит повинен визначити значення для всіх стовпців у таблиці
  • VALUES- Визначає рядок значень, які будуть вставлені в таблицю або подання; значення має бути визначене у реченні VALUESдля кожного стовпця у списку стовпців
  • subquery_2- підзапит, який повертає рядки, що вставляють до таблиці; вибірковий список цього підзапиту повинен мати таку ж кількість стовпців, як у списку стовпців затвердження

Твердження із фразою VALUESдодає одиночний рядок до таблиці. Цей рядок містить значення, визначені фразою VALUES.
Твердження з підзапитомзамість фрази VALUESдодає до таблиці всі рядки, повернуті підзапитом. Сервер обробляє підзапиті вставляє кожний повернутий рядок до таблиці. Якщо підзапит не вибирає жодних рядків, сервер не вставляє жодних рядків у таблицю.
Підзапитможе звернутися до будь-якої таблиці або подання, включаючи цільову таблицю затвердження . Сервер призначає значення полям у нових рядках, заснованих на внутрішній позиції стовпців у таблиці та порядку значень фрази VALUESабо у списку вибору запиту. Якщо якісь стовпці пропущені у списку стовпців, сервер призначає їм значення за промовчанням, визначені під час створення таблиці. Якщо будь-який з цих стовпців має NOT NULL обмеження, то сервер повертає помилку, що вказує, що обмеження було порушено і скасовує затвердження INSERT.
При видачі затвердження INSERT включається будь-який INSERT - тригер, визначений таблиці.

INSERT INTO Приклад 1

INSERT INTO dept VALUES(50, «ПРОДУКЦІЯ», «САН-ФРАНЦІСКО»);

INSERT INTO Customers (city, cname, cnum) VALUES('London', 'Hoffman', 2001);

INSERT INTO Приклад 2
Нижченаведена команда копіює дані співробітників фірми, комісійні яких перевищують 25% доходу в таблицю bonus:

INSERT INTO bonus SELECT ename, job, sal, comm FROM emp WHERE comm > 0.25 * sal;

INSERT INTO Приклад 3
Якщо потрібно вставити NULL-значення, необхідно вказати його як звичайне значення так:

INSERT INTO Salespeople VALUES (1001, 'Peel',NULL,12);

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

INSERT INTO Londonstaff SELECT * FROM Salespeople WHERE city = 'London';

MySQL INSERT

Для вставлення нових рядків у базу даних MySQL використовується команда INSERT, приклади команди наведені нижче:
INSERT INTO Приклад 1.
Вставте новий рядок у таблицю table_name.

INSERT INTO

INSERT INTO Приклад 2.
Вставка нового рядка в таблицю table_name із зазначенням вставки даних у потрібні колонки.

INSERT INTO table_name VALUES ('1','165','0','name');

У базі даних MySQLє можливість вставляти безліч нових рядків, використовуючи одну команду .
INSERT INTO Приклад 3.
Вставте кілька рядків у таблицю table_name.

INSERT INTO table_name (tbl_id, chislo, chislotwo, name) VALUES ('1','159','34','name1'), ('2','14','61','name2'), ('3 ','356','8','name3');

Останнє оновлення: 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.

Всім привіт! У цій статті йтиметься про те, як можна додавати дані до таблиціу Microsoft SQL Server, якщо Ви вже хоч трохи знайомі з мовою T-SQL, то напевно зрозуміли, що зараз ми говоритимемо про інструкцію INSERT, а також про те, як її можна використовувати для додавання даних до таблиці.

Почнемо за традицією з невеликої теорії.

Інструкція INSERT у T-SQL

INSERT– це інструкція мови T-SQL, яка призначена додавання даних у таблицю, тобто. створення нових записів. Дану інструкцію можна використовувати як додавання одного рядка в таблицю, так масової вставки даних. Для виконання інструкції INSERT потрібен дозвіл на вставку даних ( INSERT) у цільову таблицю.

Існує кілька способів використання інструкції INSERT у частині даних, які потрібно вставити:

  • Перерахування конкретних значень для вставки;
  • Вказує набір даних у вигляді запиту SELECT;
  • Вказує набір даних у вигляді виклику процедури, яка повертає табличні дані.

Спрощений синтаксис

INSERT [таблиця] ( список стовпців, …) VALUES ( список значень, …) Або SELECT запит на вибіркуАбо EXECUTE процедура

  • INSERT INTO – це команда додавання даних до таблиці;
  • Таблиця – це ім'я цільової таблиці, куди необхідно вставити нові записи;
  • Список стовпців - це перелік імен стовпців таблиці, в яку будуть вставлені дані, розділені комами;
  • VALUES - це конструктор табличних значень, за допомогою якого ми вказуємо значення, які вставлятимемо в таблицю;
  • Список значень – це значення, які будуть вставлені, розділені комами. Вони перераховуються у порядку, у якому зазначені стовпці у списку стовпців;
  • SELECT - це запит на вибір даних для вставки в таблицю. Результуючий набір даних, який поверне запит, має відповідати списку стовпців;
  • EXECUTE – це виклик процедури отримання даних для вставки в таблицю. Результуючий набір даних, який поверне процедура, що зберігається, повинен відповідати списку стовпців.

Ось приблизно так і виглядає спрощений синтаксис інструкції INSERT INTO, в більшості випадків саме так Ви і додаватимете нові записи в таблиці.

Список стовпців, в які Ви вставлятимете дані, можна і не писати, у такому разі їх порядок буде визначений на основі фактичного порядку стовпців у таблиці. При цьому необхідно пам'ятати цей порядок, коли Ви вказуватимете значення для вставки або писати запит на вибірку. Особисто я Вам рекомендую все ж таки вказувати список стовпців, у які Ви плануєте додавати дані.

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

Ще хотілося б відзначити, що тип даних значень, які Ви вставлятимете, повинен відповідати типу даних стовпця, в який буде вставлено це значення, ну або, хоча б, підтримував неявне перетворення. Але я раджу Вам контролювати тип даних ( формат) значень, як у списку значень, і у запиті SELECT.

Досить теорії, переходимо до практики.

Вихідні дані

Для того щоб додавати дані до таблиці, нам потрібна відповідно сама таблиця, давайте її створимо, і вже в неї будемо намагатися додавати записи.

Примітка! Всі приклади будуть виконані в Microsoft SQL Server 2016 Express.

CREATE TABLE TestTable( IDENTITY(1,1) NOT NULL, (100) NOT NULL, NOT NULL)

Наша тестова таблиця буде містити перелік товарів з ціною.

Також у прикладах ми будемо використовувати процедуру, яка повертає табличне значення, для додавання даних до таблиці, тому давайте її також створимо.

CREATE PROCEDURE TestProcedure AS BEGIN SELECT ProductName, Price FROM TestTable END

Для прикладу вона у нас повертатиме дані із щойно створеної таблиці TestTable.

Примітка!

Як Ви розумієте, читання даного матеріалу передбачає готівку певних знань з мови T-SQL, тому якщо Вам щось незрозуміло, рекомендую ознайомитися з такими матеріалами:

Приклад 1 – Додаємо новий запис до таблиці з використанням конструктора табличних значень

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

INSERT INTO TestTable(ProductName, Price) VALUES ("Комп'ютер", 100) GO SELECT * FROM TestTable

Ви бачите, що ми після назви таблиці перерахували через кому імена стовпців, в які ми будемо додавати дані, потім ми вказали ключове слово VALUESі в дужках також, у тому ж порядку, через кому написали значення, які ми хочемо вставити.

Після інструкції INSERT я написав інструкцію SELECT і поділив їх GO.

А тепер давайте уявімо, що нам потрібно додати кілька рядків. Ми для цього напишемо наступний запит.

INSERT INTO TestTable(ProductName, Price) VALUES ("Комп'ютер", 100), ("Клавіатура", 20), ("Монітор", 50) GO SELECT * FROM TestTable


Приклад 2 – Додаємо нові рядки до таблиці за допомогою запиту SELECT

Найчастіше виникає необхідність додавати багато даних у таблицю, наприклад, з урахуванням запиту вибірку, тобто. SELECT. Для цього замість VALUES нам лише потрібно вказати запит.

INSERT INTO TestTable(ProductName, Price) SELECT ProductName, Price FROM TestTable WHERE Id >


У даному прикладі ми написали запит SELECT, який повертає дані з таблиці TestTable, але не всі, а тільки ті, у яких ідентифікатор більше 2. А результат вставили все в таблицю TestTable.

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

INSERT INTO TestTable SELECT ProductName, Price FROM TestTable WHERE Id > 2 GO SELECT * FROM TestTable


У даному випадку ми впевнені, що в таблиці TestTable перший стовпець це ProductName, а другий Price, тому ми можемо дозволити собі написати саме так. Але, знову повторюся, практично краще вказувати список стовпців.

Якщо Ви помітили, я у всіх прикладах не вказував стовпець Id, а він у нас є, помилки не виникло, оскільки цей стовпець із властивістю IDENTITY, він автоматично генерує ідентифікатори, тому в такий стовпець вставити дані просто не вийде.

Приклад 3 – Додаємо нові записи в таблицю з використанням процедури, що зберігається

Зараз давайте вставимо в таблицю дані, які нам поверне процедура, що зберігається. Сенс тут такий самий, замість VALUES та замість запиту ми вказуємо виклик процедури. Але як Ви розумієте, порядок і кількість стовпців, які повертаються процедурою, повинен строго співпадати зі списком стовпців для вставки ( навіть якщо список стовпців не вказано).

INSERT INTO TestTable(ProductName, Price) EXEC TestProcedure GO SELECT * FROM TestTable


Сподіваюся, що цей матеріал допоміг Вам розібратися з інструкцією INSERT INTO, А в мене все, поки що!

sql запит INSERT INTO має сенс при створеній таблиці бази даних. Тобто таблиця існує, має назву, створені рядки та стовпці. створюється таблиця оператором: модифікується таблиця оператором .

sql запит INSERT INTO - синтаксис запиту

sql запит INSERT INTO має наступний синтаксис:

INSERT INTO назва_таблиці (у дужки, якщо потрібно, вставляємо список колонок куди потрібно вставити дані) VALUES вставляються дані1, вставлені дані2, вставлені дані3.

Між INSERT та INTRO можна вставити опцію IGNORE. Вона не є обов'язковою. Потрібна для захисту первинних ключів під час редагування таблиці. Інакше, якщо при редагуванні відбувається дублювання первинних ключів, то при вставці опції IGNORE перший рядок з первинним ключем залишиться в таблиці, що змінюється, Інші первинні ключі видаляються. За замовчуванням цю опцію опускаємо.

Є необов'язкові опції LOW_PRIORITY та DELAYED. Вони визначають пріоритети додавання інформації до БД. Перша задає очікування на звільнення БД, друга означає буферизацію інформації.

Рядок у запиті: INSERT із фразою VALUES дозволить додати одиночний рядок до таблиці БД. Фраза VALUES містить значення цих даних.

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

  • subquery_1 - підзапит, який сервер обробляє тим же способом, що і подання
  • subquery_2 - підзапит, який повертає рядки, що вставляють до таблиці. Список цього підзапиту повинен мати кількість стовпців, що збігається зі списком стовпців INSERT.

Підзапити практично не використовуються у базі даних MySQL.

Приклади SQL запиту INSERT INTO в базі даних MySQL

Вставляємо нові рядки у БД MySQL командою INSERT INTRO.

Перший приклад.

Вставляємо нові рядки у таблицю table_name.

INSERT INTO table_name VALUES ('2','145','1','name');

Це означає, що хочемо в таблицю table_name вставити в стовпці значення 2,145,1,name. Оскільки стовпці не вказані значення заполяются у всі стовпці таблиці.

Приклад другий.

Вставка інформації у потрібні (зазначені) стовпці таблиці table_name.

INSERT INTO table_name (client_customer, client_subclient, client_mail) VALUES ('name1','subname1',' [email protected]′), (‘name2′,’subname2′,’ [email protected]′), (‘name3′,’subname3′,(’ [email protected]′);

Ігор Сєров спеціально для сайту «».

Завантаження...