- •Із чого почати?
- •Історія розвитку sql
- •Керування базами даних за допомогою sql
- •Опис навчальної бази даних
- •Структура операторів і базові елементи мови
- •Синтаксис оператора select
- •Використання умов пошуку для відбору рядків
- •Одержання підсумкових даних
- •Сортування результатів запиту
- •Прості запити й правила їхнього виконання
- •Особливості багатотабличних запитів
- •Об'єднання таблиць
- •Використання вкладених запитів
- •Використання операторів exists, any, all, і some
- •Додавання інформації в базу даних
- •Видалення даних
- •Зміна існуючих даних
- •Створення баз даних
- •Створення таблиць
- •Індекси
- •Визначення умов перевірки
- •Створення синонімів
Додавання інформації в базу даних
Всі записи в 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, на яку впливає команда, тому така конструкція є припустимою.
