Введено в синтаксис. SQL INSERT INTO SELECT, заява. Приклади SQL запиту INSERT INTO в базі даних MySQL

За допомогою 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 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]′);

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

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

What is INSERT INTO?

Головним завданням бази даних системи є store data в tables. The data is usually supplied by application programs that run on top of the database. Назад, що закінчується, SQL має INSERT command, що використовується в store data intable. The INSERT command creates a new rowв table to store data.

Basic syntax

Let"s look at the basic syntax of the SQL INSERT command shown below.

INSERT INTO `table_name`(column_1,column_2,...) VALUES (value_1,value_2,...);

  • INSERT INTO `table_name` is the command that tells MySQL server до add новий рядок в table named `table_name`.
  • (column_1,column_2,...) specifies the columns to be updated in the New row
  • VALUES (value_1,value_2,...) specifies the values ​​to be added into the new row

Коли випливає значення ваших цін до того, щоб бути внесено до нового table, наведено, слід розглядати, коли розкривається з різними типами даних.

  • String data types- всі значення strings should be enclosed in single quotes.
  • Numeric data types- всі numerical values ​​should be supplied directly without inclosing them in single or double quotes.
  • Date data types- close date values ​​in single quotes у форматі "YYYY-MM-DD".

Example:

Схема того, що ми маємо наступний лист нової library members, які необхідні для того, щоб бути внесені до database.

Full names Date of Birth gender Physical address Postal address Contact number Email Address
Leonard Hofstadter Male Woodcrest 0845738767
Sheldon Cooper Male Woodcrest 0976736763
Rajesh Koothrappali Male Fairview 0938867763
Leslie Winkle 14/02/1984 Male 0987636553
Howard Wolowitz 24/08/1981 Male South Park P.O. Box 4563 0987786553

Lets" INSERT data one by one. Ви будете запускати з Leonard Hofstadter. Ви повинні скористатися contact number as numeric data type and no close the number in single quotes.

INSERT INTO `members` (`full_names`, `gender`, `physical_address`, `contact_number`) VALUES ("Leonard Hofstadter", "Male", "Woodcrest", 0845738767);

Завершивши вище script drops 0 from Leonard"s contact number. This is because the value will be treatted as numerical value and the zero (0) at beginning is dropped since it"s not significant.

У відповідь на ці проблеми, значення миттєвості будуть встановлені в 1 quotes як показано нижче -

INSERT INTO `members` (`full_names`, `gender`, `physical_address`, `contact_number`) VALUES ("Sheldon Cooper", "Male", "Woodcrest", "0976736763");

In above case , zero(0) will not be dropped

Зміна ордера columnів не впливає на INSERT правильність, як тривалі значення коректних значень, що мають бути mapped to прямі сторінки.

Query shown below demonstrates над point.

INSERT INTO `members` (`contact_number`, `gender`, `full_names`, `physical_address`) VALUES ("0938867763", "Male", "Rajesh Koothrappali", "Woodcrest");

Протягом кількостей skipped data of birth column, by default MySQL буде insert NULL values ​​in columns що є skipped in the INSERT query.

Let's now insert the record для Leslie which has the date of birth supplied. Значення значення може бути включене в 1 quotes за допомогою формату "YYYY-MM-DD".

INSERT INTO `members` (`full_names`, `date_of_birth`, `gender`, `physical_address`, `contact_number`) VALUES ("Leslie Winkle", "1984-02-14", "Male", "Woodcrest", " 0987636553");

Всі з вищезгаданих сторін визначать columnи і mapped them to values ​​in insert statement. Якщо ми встановлюємо значення для ALL columns в table, то ми можемо оминути columns from the insert query.

INSERT INTO `members` VALUES (9, "Howard Wolowitz", "Male", "1981-08-24", "SouthPark", "P.O. Box 4563", "0987786553", "lwolowitzemail.me");

Let's now use the SELECT statement to view all the rows in the members table.SELECT * FROM `members`;

membership_numberfull_namesgenderdate_of_birthphysical_addresspostal_addresscontct_numberemail
1 Janet JonesFemale21-07-1980 First Street Plot No 4Private Bag0759 253 542 Цей email address is being protected from spambots. Ви повинні JavaScript enabled to view it.
2 Janet Smith JonesFemale23-06-1980 Melrose 123NULLNULLЦей email address is being protected from spambots. Ви повинні JavaScript enabled to view it.
3 Robert PhilMale12-07-1989 3rd Street 34NULL12345 Цей email address is being protected from spambots. Ви повинні JavaScript enabled to view it.
4 Gloria WilliamsFemale14-02-1984 2nd Street 23NULLNULLNULL
5 Leonard HofstadterMaleNULLWoodcrestNULL845738767 NULL
6 Sheldon CooperMaleNULLWoodcrestNULL976736763 NULL
7 Rajesh KoothrappaliMaleNULLWoodcrestNULL938867763 NULL
8 Leslie WinkleMale14-02-1984 WoodcrestNULL987636553 NULL
9 Howard WolowitzMale24-08-1981 SouthParkP.O. Box 4563987786553 Цей email address is being protected from spambots. Ви повинні JavaScript enabled to view it.

Будь ласка, зазначте, що номер за телефоном Leonard Hofstadter був скасований 0 (0) від contact number. Інші контактні номери не будуть спущені 0 (0) при початку.

Запуск в Table від іншої Table

INSERT Command може також бути використаний для включення data в table з іншого table. The basic syntax is as shown below.

INSERT INTO table_1 SELECT * FROM table_2;

Let's now look at a practical example, we will create a dummy table for movie categories for demonstration purposes. We will call the new categories table categories_archive.

CREATE TABLE `categories_archive` (`category_id` int(11) AUTO_INCREMENT, `category_name` varchar(150) DEFAULT NULL, `remarks` varchar(500) DEFAULT NULL, PRIMARY KEY (`category_id`))

Execute the script to create the table.

Let's now insert all the rows from the table category in category archive table.

INSERT INTO `categories_archive` SELECT * FROM `categories`;

Використовуючи вище script inserts all rows from the table category in category archive table. Note the table structures will have to be same for script to work. Більше robust script is one that maps the column names in the insert table to the ones in the table containing the data .

The query shown below demonstrates його використання.

INSERT INTO `categories_archive`(category_id,category_name,remarks) SELECT category_id,category_name,remarks FROM `categories`;

Executing the SELECT query

SELECT * FROM `categories_archive`

gives the following results shown below.

category_idcategory_nameremarks
1 ComedyMovies with humour
2 RomanticLove stories
3 EpicStory acient movies
4 HorrorNULL
5 Science FictionNULL
6 ThrillerNULL
7 ActionNULL
8 Romantic ComedyNULL
9 CartoonsNULL
10 CartoonsNULL

Summary

  • INSERT command is used to add new data into a table
  • Час і строки цінності повинні бути внесені в один quotes.
  • Номерові значення не потрібні для того, щоб бути зафіксовані в quotes.
  • INSERT command може також бути використаний до insert data з одного table в інше.

Крім інструкції SELECT, яка була розглянута раніше, мова маніпуляції даними DML (Data Manipulation Language) містить три інші інструкції: INSERT, UPDATE та DELETE. Подібно до інструкції SELECT ці три інструкції оперують або таблицями, або уявленнями. Ця стаття розглядає інструкцію INSERT, а дві інші інструкції розглядаються в наступній статті.

Інструкція INSERTвставляє рядки (або частини рядків) до таблиці. Існує дві різні форми цієї інструкції:

INSERT tab_name [(col_list)] DEFAULT VALUES | VALUES (( DEFAULT | NULL | expression ) [ ,...n]) INSERT INTO tab_name | view_name [(col_list)] (select_statement | execute_statement) Угоди щодо синтаксису

Перша форма інструкції дозволяє вставити в таблицю один рядок (або її частину). А друга форма інструкції INSERT дозволяє вставити в таблицю результуючий набір інструкції SELECT або процедури, що зберігається за допомогою інструкції EXECUTE. Процедура, що зберігається, повинна повертати дані для вставки в таблицю. Інструкція SELECT, що застосовується з інструкцією INSERT, може вибирати значення з іншої або тієї ж таблиці, в яку вставляються дані, за умови сумісності типів даних відповідних стовпців.

Для обох форм тип даних кожного значення, що вставляється, повинен бути сумісним з типом даних відповідного стовпця таблиці. Усі строкові та тимчасові дані мають бути укладені у лапки; чисельні значення укладати в лапки не потрібно.

Вставка одного рядка

Для обох форм інструкції INSERT явна вказівка ​​списку стовпців не є обов'язковою. Відсутність списку стовпців рівнозначно вказівкою всіх стовпців таблиці.

Параметр DEFAULT VALUESвставляє стандартні значення для всіх стовпців. У стовпці з типом даних TIMESTAMP або властивістю IDENTITY за замовчуванням вставляються значення автоматично створювані системою. Для стовпців інших типів даних вставляється відповідне ненульове значення за промовчанням, якщо таке є, або NULL в іншому випадку. Якщо для стовпця значення NULL не дозволено і для нього не визначено значення за промовчанням, виконання інструкції INSERT завершується помилкою та виводиться відповідне повідомлення.

У прикладі нижче показано вставлення рядків у таблицю Employee бази даних SampleDb, демонструючи використання інструкції INSERT для вставки невеликого обсягу даних у базу даних:

USE SampleDb; INSERT INTO Employee VALUES (34990, "Андрій", "Батонов", "d1"); INSERT INTO Employee VALUES (38640, "Олексій", "Васин", "d3");

Існує два різних способіввставки значень у новий рядок. Інструкція INSERT у прикладі нижче явно використовує ключове слово NULL і вставляє значення NULL у відповідний стовпець:

USE SampleDb; INSERT INTO Employee VALUES (34991, "Андрій", "Батонов", NULL);

Щоб вставити значення в деякі (але не всі) стовпці таблиці, зазвичай необхідно явно вказати ці стовпці. Не зазначені стовпці мають або дозволяти значення NULL, або для них має бути визначено значення за промовчанням.

USE SampleDb; INSERT INTO Employee(Id, FirstName, LastName) VALUES (34992, "Андрій", "Батонов");

Попередні два приклади рівнозначні. У таблиці Employee єдиним стовпцем, що дозволяє значення NULL, є стовпець DepartmentNumber, а всіх інших стовпців це значення було заборонено пропозицією NOT NULL в інструкції CREATE TABLE.

Порядок значень у пропозиції VALUESІнструкції INSERT можуть відрізнятися від порядку, зазначеного в інструкції CREATE TABLE. У такому разі їхній порядок повинен співпадати з порядком, у якому відповідні стовпці перераховані у списку стовпців. Нижче показаний приклад вставки даних у порядку, що відрізняється від вихідного:

USE SampleDb; INSERT INTO Employee(DepartamentNumber, LastName, Id, FirstName) VALUES ("d1", "Батонов", 34993, "Андрій");

Вставка кількох рядків

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

Нова таблиця MoscowDepartment, що створюється в прикладі вище, має ті ж стовпці, що і існуюча таблиця Department, за винятком відсутнього стовпця Location. Підзапит в інструкції INSERT вибирає у таблиці Department усі рядки, для яких значення стовпця Location дорівнює "Москва", які потім вставляються у створену на початку запиту нову таблицю.

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

USE SampleDb; CREATE TABLE ManagerTeam (EmpId INT NOT NULL, ProjectNumber CHAR (4) NOT NULL, EnterDate DATE); INSERT INTO ManagerTeam (EmpId, ProjectNumber, EnterDate) SELECT EmpId, ProjectNumber, EnterDate FROM Works_on WHERE Job = "Менеджер";

Перед вставкою рядків за допомогою інструкції INSERT таблиці MoscowDepartment та ManagerTeam (у прикладах вище) були порожніми. Якщо ж таблиця вже існувала та містила рядки з даними, то до неї було б додано нові рядки.


Top