Лабораторна
робота № 4
SQL-ЗАПИТИ — ДІЇ (INSERT UPDATE
DELETE)
Мета – ознайомитися з
синтаксисом SQL-запитів, що дозволяють редагувати дані в таблицях та навчитися
їх використовувати.
Засоби. Виділений
сервер MySql, клієнт для адміністрування сервера MySql (MySql-front
або PHPMyAdmin), навчальна база даних.
Теоретичні відомості
INSERT
INSERT INTO ім'я таблиці [(стовпець_1, стовпець_2...)]
VALUES (вираз_1, вираз_2...)
або
INSERT INTO ім'я таблиці [(стовпець_1, стовпець_2...)]
SELECT ...
Оператор INSERT вставляє
нові рядки в існуючу таблицю. Форма даної команди INSERT ... VALUES вставляє рядки відповідно до точно вказаних в
команді значень. Форма INSERT ... SELECT вставляє
рядки, вибрані з іншої таблиці або таблиць.
Ім'я таблиці – таблиця, в яку повинні бути внесені рядки.
Стовпці, для яких задані величини в команді, вказуються в списку імен стовпців.
Якщо не вказаний список стовпців для INSERT ... VALUES або INSERT ... SELECT, то величини для всіх стовпців повинні бути визначені
в списку VALUES() або
в результаті роботи SELECT.
Будь-який стовпець, для якого явно не вказано
значення, буде встановлений в своє значення за замовчуванням. Наприклад, якщо в
заданому списку стовпців не вказані всі стовпці в даній таблиці, то не згадані
стовпці встановлюються в свої значення за умовчанням.
Вираз_i може відноситься до будь-якого стовпця, який раніше
був внесений в список значень. Наприклад, можна вказати наступне:
INSERT INTO tbl_name (col1,
col2) VALUES(15 col1*2)
Але не можна вказати:
INSERT INTO tbl_name (col1,
col2) VALUES(col2*2, 15)
Оператор INSERT ... SELECT забезпечує
можливість швидкого внесення великої кількості рядків в таблицю з однієї або
більше таблиць.
Для оператора INSERT
... SELECT необхідне дотримання наступної умови. Цільова таблиця
команди INSERT не
повинна з'являтися в твердженні FROM частини
SELECT даного запиту, оскільки в SQL заборонено проводити
вибірку з тієї ж таблиці, в яку проводиться вставка. У наступному прикладі
показано додавання в таблицю Clients нового
рядка про замовника Сканерів, 41 рік, з м. Луцьк.
INSERT INTO Clients (ID_NUM,
Name, City, Age)
VALUES (1225, 'Сканерів', 'Луцьк', 41)
UPDATE
UPDATE ім'я таблиці
SET [стовпець_1 = вираз_1] ,[стовпець_2 = вираз_2
...]
[WHERE умова відбору рядків]
Оператор UPDATE оновлює
стовпці відповідно до їх нових значень в рядках існуючої
таблиці. У виразі SET указується,
які саме стовпці слід
модифікувати і які величини повинні бути в них встановлені. У виразі WHERE,
якщо він присутній, задається, які рядки підлягають оновленню. У решті випадків
оновлюються всі рядки.
Якщо доступ до стовпця з вказаного виразу здійснюється
по аргументу ім'я стовпця, то оператор UPDATE використовує
для цього стовпця його поточне значення. Наприклад, наступна команда встановлює
в стовпці Age значення,
на одиницю більше його поточної величини:
UPDATE Clients SET Age
= Age + 1
Якщо в UPDATE змінюються
значення декількох стовпців, то нові значення привласнюються зліва направо,
тобто спочатку стовпець_1 = вираз_1, потім стовпець_2
= вираз_2 і т.д.
DELETE
DELETE FROM ім'я таблиці
[WHERE умова відбору рядків]
Оператор DELETE видаляє
з таблиці записи, що задовольняють заданій умовіі відбору рядків. Умова відбору рядків формулюється за тими ж
правилами, що і в операторі SELECT. Зокрема допускається використання вкладених запитів.
У наступному прикладі з таблиці Clients віддаляються записи про замовників з міста Луцьк.
DELETE FROM
Для виконання завдань даної лабораторної роботи насамперед необхідно
провести підготовчу роботу.
1. Скопіювати таблицю Студенти (Students) у
власну базу даних.
Це можна зробити, наприклад, так: спочатку створити у власній базі даних
таблицю з такою ж структурою, як і Students (такими ж
полями і з таким же порядком полів), а потім перенести туди всі записи командою
INSERT INTO MyBase.students
(SELECT * FROM univer.students)
Нижче розглянуто детальніше даний запит.
Відтворити структуру таблиці можна, використавши SQL-запит для створення
таблиці, який показує MySql-front у властивостях таблиці
на закладці „Source code” (Джерело).
Вікно властивостей таблиці можна викликати з контекстного меню цієї
таблиці.
2. Зробити копію у своїй базі таблиць faculty і speciality з БД univer.
Завдання
1.
Написати запит, що переводить всіх студентів
на наступний курс.
2.
Написати запит, який скасовує дію
попереднього запиту.
3.
Вставити за допомогою SQL-запиту
в таблицю запис нового студента (себе).
4.
Усі студенти з групи КСМ-41 одружилися.
Написати запит, який робить зміни в таблицю відповідно до цього факту.
5.
Студентів 2-го курсу, які народилися 15
числа, у зв'язку з академічною заборгованістю відрахувати, і всі вони
поновились, але на платну форму навчання. Написати запит, який робить зміни в
таблицю відповідно до цього факту.
6.
У зв'язку з новим законом усіх
"чорнобильців" перевели на державну форму навчання. Написати запит,
який робить зміни в таблицю відповідно до цього факту.
7.
На "технічних" спеціальностях
(у назві є слово "обладнання") відмінили платну форму навчання і всіх
студентів-платників, які навчалися на цих спеціальностях, перевели на державну
форму навчання. Написати запит, який змінює дані в таблиці відповідно до цього
факту.
8.
Вставити в окрему таблицю прізвища
студентів 3-го курсу.
9.
Згідно з наказом ректора з університету
відрахували всіх студентів четвертого курсу, загальний середній бал яких за
попередні курси не перевищував 3,7. Вилучити записи про цих студентів з бази
даних.
10.
Створити в таблиці Students три
додаткові поля FirstName (ім'я), LastName
(прізвище) і FatherName (по батькові). Заповнити їх, взявши
дані з поля Name.
11.
Створити в таблиці Students поле ShortName
(Прізвище та ініціали), заповнити його, взявши дані з поля Name.
12.
Усім студентам, в кого сьогодні день
народження, збільшити середні оцінки по курсах на 0,2 бала (одним запитом).
13.
Написати запит, що всіх Андріїв і Михайлів
переводить на наступний курс, якщо вони не на 5-му курсі.
14.
Усіх студентів з прізвищем Іванов
перевести на ФКНІТ.
15.
Усіх студентів, що вчаться на ФКНІТ, в
яких середній бал за 2 курс нижчий за 3,5, перевести на ТФ.
16.
Усім студентам, що народилися 1 квітня,
надати статус одружених з 3-ма дітьми.