Лабораторна робота № 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 Clients WHERE City = 'Луцьк'

Для виконання завдань даної лабораторної роботи насамперед необхідно провести підготовчу роботу.

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-ма дітьми.