Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Структурована мова запитів SQL.doc
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
663 Кб
Скачать
☆

Додавання інформації в базу даних

Всі записи в 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

1001

5

10/06/1999

3412

2001

1005

5

12/06/1999

3416

2004

Отже, буде зробленеі наступне: всі значення, видані запитом (інформація про студентів, що має тільки відмінні оцінки), містяться в таблицю, названу 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, на яку впливає команда, тому така конструкція є припустимою.