- багаторядковий оператор INSERT добавляє в цільову таблицю кілька рядків (як правило, більше одного).
В цьому виді оператора INSERT значення нових рядків явно не вказуються.
Джерелом нових рядків служить запит на вибірку, який міститься в операторі INSERT.
2). Нехай нам потрібно скопіювати номери, дати і вартості всіх замовлень, зроблених до 1 січня 2000 року із таблиці Zamovlennia в таблицю Stari Zamovl.
2). INSERT INTO Stari Zamovl
(Kod_Zamovl, Data_Zamovl, Vartist)
SELECT Kod_Zamovl, Data_Zamovl, Vartist
FROM Zamovlennia
WHERE Data_Zamovl < ‘01-JAN-2000’
- спочатку виконується запит до таблиці Zamovlennia, а потім таблиця результатів цього запиту добавляється в таблицю Stari Zamovlennia – по рядково.
Запит на вибірку, який міститься в багаторядковому операторі INSERT, згідно стандарту SQL1, повинен задовольняти вимогам:
1). Запит не повинен містити секцію ORDER BY.
Не має змісту сортувати таблицю результатів запиту, бо вона добавляється в цільову таблицю, яка (як і всі інші) – не впорядкована.
2). Таблиця результатів запиту повинна містити кількість стовпчиків, яка дорівнює кількості стовпчиків в списку секції INTO оператора INSERT (або співпадати з кількістю стовпчиків цільової таблиці, якщо список стовпчиків в секції INTO не вказується).
Типи даних відповідних стовпчиків таблиці результатів запиту і цільової таблиці повинні бути сумісними.
3). Запит не може бути запитом на об’єднання (UNION) кількох операторів SELECT.
4). Ім’я цільової таблиці секції INTO оператора INSERT не може бути вказане в секції FROM запиту на вибірку, або будь-якого в нього.
Тим самим забороняється добавлення таблиці самої до себе.
Перші два обмеження очевидні, а останні були добавлені для того, щоб уникнути зайвої складності оператора INSERT.
В стандарті SQL2 ці обмеження були ослаблені – в запиті дозволяються операції UNION та JOIN; дозволяється також „самодобавлення”.