Всі записи в SQL уводяться з використанням команди модифікації INSERT. У найпростішій формі ця команда має наступний синтаксис:
INSERT INTO <table name>
VALUES (<value>, <value> . . .);
Так, наприклад, для додавання запису в таблицю викладачів TEACHERS, можна скористатися наступним вираженням:
INSERT INTO TEACHERS
VALUE S (4006, 'Федченко', 'Світлана',
Геннадіївна', 01/09/1999);
Команда INSERT не робить ніякого висновку, але бажано, щоб СКБД давала деяке підтвердження того, що дані були успішно внесені. Крім того, варто пам'ятати, що ім'я таблиці, у яку виробляється вставка, повинне бути попередньо визначено, а кожне значення в списку вставляють данных, що, повинне збігатися з типом даних стовпця, у який воно уставляється. Значення в цьому списку вводяться в таблицю в тім порядку, у якому вони записані в команді, тому перше значення автоматично попадає в перший стовпець, друге - у другий стовпець і т.д.
Якщо потрібно ввести в таблицю NULL значення, то воно вводиться точно так само, як і звичайне. Наприклад, що випливає команда, що вставляє запис із невідомим значенням коду викладача, цілком припустима:
INSERT INTO TEACHERS
VALUES (NULL, 'Федченко', 'Світлана',
'Геннадіївна', 01/09/1999);
Тому що значення NULL - спеціальне службове слово, то містити його в одиночні лапки не потрібно.
Також допускається вказувати стовпці, куди необхідно здійснити вставку значення, що дозволяє робити це в будь-якому порядку. Наприклад, команда:
INSERT INTO TEACHERS (TDATE, TFAM, TIMA)
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 команда ніякого висновку не робить)
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 OCENKA = 5);
Обидва запити в цій команді функціонують так само, як якби вони не були частиною вираження INSERT. Подзапрос знаходить всі рядки для студентів, що мають відмінні оцінки, і формує набір значень SNUM. Зовнішній запит вибирає рядка з таблиці STUDENTS, де ці значення SNUM знайдені, a INSERT вставляє знайдені дані в таблицю STO.
У команді INSERT допускається використати співвіднесені подзапросы. Припустимо, що є таблиця MAXOCENKA, у якій зберігається інформація про студента, що має максимальну оцінку за певну дату (скажемо, для нарахування іменної стипендії). Тоді, для відстеження зміни даних у таблиці успішності й модифікації відповідної інформації про претендента на іменну стипендію, необхідно скористатися наступною командою зі співвіднесеним подзапросом:
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, на яку впливає команда, тому така конструкція є припустимою.