Головна - Дані
Основи T-SQL. DML

За допомогою 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" .

Крім інструкції 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 (у прикладах вище) були порожніми. Якщо ж таблиця вже існувала і містила рядки з даними, то до неї було б додано нові рядки.

Інструкція 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

Синтаксис команди 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');

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

Синтаксис

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

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 задає поля для додавання до зазначеного кінцевий об'єкт.

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

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

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

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

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

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

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

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

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



 


Читайте:



Як на смартфоні Нокіа Х2 дві сім карти встановити свою мелодію на потрібний контакт

Як на смартфоні Нокіа Х2 дві сім карти встановити свою мелодію на потрібний контакт

ibnlive.in.com Як поставити мелодію на Нокіа Люмія? Люди ставлять це питання відразу після покупки телефону. Адже, як правило, у всіх сучасних...

Безкоштовні програми для Windows скачати безкоштовно

Безкоштовні програми для Windows скачати безкоштовно

Microsoft .NET Framework розроблена для програм, які працюють на архітектурі ".NET". Перша її версія вийшла в 2002-му році як аналог...

Як записати будь-який ISO-образ на флешку

Як записати будь-який ISO-образ на флешку

Привіт, друзі! Сьогодні знову поговоримо про створення завантажувальної флешки. Як створити завантажувальний USB-пристрій? З якою метою його використовувати...

Дзвінки з невідомих номерів

Дзвінки з невідомих номерів

Останнім часом у Росії користувачі зіткнулися з новим видом спаму, при якому абоненту постійно дзвонять і скидають з невідомих...

feed-image RSS