Команда INSERT не виробляє ніякого висновку, але бажано, щоб СУБД давала деяке підтвердження того, що дані були успішно внесені. Крім того, слід пам'ятати, що ім'я таблиці, в яку виробляється вставка, повинне бути заздалегідь визначене, а кожне значення в списку даних, що вставляються, повинне співпадати з типом даних стовпця, в який воно вставляється. Значення в цьому списку вводяться в таблицю в тому порядку, в якому вони записані в команді, тому перше значення автоматично потрапляє в перший стовпець, друге - в другий стовпець і т. д.
Якщо вимагається ввести в таблицю NULL значення, то воно вводиться точно так, як і звичайне Наприклад, наступна команда, що вставляє запис з невідомим значенням коду викладача, цілком допустима:
Оскільки значення NULL - спеціальне службове слово, то заключати його в одиночні лапки не вимагається.
Також припускає указувати стовпці, куди необхідно здійснити вставку значення, що дозволяє робити це у будь-якому порядку. Наприклад, команда:
INSERT INTO TEACHERS
(TDATE, TFAM, ТІMA)
VALUES
(01/09/1999, 'Федченко', 'Светлана');
дозволяє вставити значення в поля таблиці в порядку TDATE, TFAM, TIMA, причому стовпці TNUM і ТОТСН відсутні. Це означає, що для цих полів автоматично встановлюється значення за умовчанням. Значення за умовчанням може бути введене наперед або. інакше, це буде NULL значення. Якщо обмеження забороняє використовування значення NULL в даному полі, то обов'язково треба поклопотатися про забезпечення стовпця змістовним значенням для будь-якої команди INSERT.
Можна використати команду INSERT для того, щоб одержувати або вибирати значення з однієї таблиці і поміщати їх в іншу разом із запитом. Для цього пропозиція VALUES замінюється на відповідний запит:
INSERT INTO EXCELLENT
SELECT *
FROM USP
WHERE OCENKA = 5;
В результаті буде сформована таблиця з даними, приведеними в табл. 2.5 (нагадаємо, що сама INSERT команда ніякого висновку не виробляє).
Таблиця 2.5 Таблиця EXCELLENT
EXCELLENT
UNUM
OCENKA
UDATE
SNUM
PNUM
10/06/1999
12/06/1999
Отже, буде зроблено наступне: всі значення, видані запитом (інформація про студентів, що мають тільки відмінні оцінки). поміщаються в таблицю. названу EXCELLENT. Для того щоб не відбулося помилки, таблиця EXCELLENT повинна вже бути створена командою CREATE TABLE (про неї мова нижче) і мати п'ять стовбців, які співпадають з таблицею USP по типу даних.
Таким чином, буде отримана незалежна таблиця з деякими даними з таблиці успішності USP. При зміні значень в таблиці USP це у жодному випадку не відобразиться на таблиці EXCELLENT.
У принципі, є можливість указувати стовпці на ім'я, як це вже було продемонстровано вище, а значить - переупорядковувати інформацію, що додається.
Наприклад, за допомогою нижчеприведеної команди можна вставити інформацію про середній бал кожного студента:
INSERT INTO AVGRAITING
(SNUM, AVGOCENKA)
SELECT SNUM, AVG (OCENKA.)
FROM USP GROUP BY SNUM;
Звернете увагу на те, що вказані імена стовбців таблиці AVGRAITING, а значить, послідовність даних в списку (тобто порядок проходження полів в пропозиції SELECT), що вставляється, повинна з цим порядком співпадати.
В INSERT можна використати підзапити усередині будь-якого запиту, який генерує значення для цієї команди аналогічно тому, як це вже робилося при розгляді відповідного матеріалу. Наприклад, для вставки у вужі наявну таблицю STO прізвищ, імен і по батькові студентів, в яких є хоча б одна відмінна оцінка, можна скористатися наступною командою:
INSERT INTO STO
(SFAM, SIMA, SOTCH)
SELECT SFAM, SIMA, SOTCH
FROM STUDENTS
WHERE SNUM = ANY (SELECT SNUM FROM USP
WHERE OCSNKA = 5);
Обидва запити в цій команді функціонує так само. неначебто вони не були частиною виразу INSERT. Підзапит знаходить всі рядки для студентів, що мають відмінні оцінки, і формує набір значень SNUM. Зовнішній запит вибирає рядки з таблиці STUDENTS, де ці значення SNUM знайдені, INSERT вставляє знайдені дані в таблицю STO.
В команді INSERT припускає використати співвіднесені підзапити. Припустимо, що є таблиця МАХО-CENKA, в якій зберігається інформація про студента, що має максимальну оцінку за певну дату (скажімо, для нарахування іменної стипендії). Тоді, для відстежування зміни даних в таблиці успішності і модифікації відповідної інформації про претендента на іменну стипендію, необхідно скористатися наступною командою із співвіднесеним підзапитом:
INSERT INTO MAXOCENKA
(SNUM, OCENKA)
SELECT SNUM, OCENKA
FROM USP FIRST
WHERE OCENKA =
(SELECT MAX (OCENKA)
FROM USP SECOND
WHERE FIRST.UDATE = SECOND.UDATE);
При цьому дана команда має підзапит, який базується на тій же самій таблиці, що і зовнішній запит, але не посилається на таблицю MAXOCENKA, на яку впливає команда, тому така конструкція є допустимою.