- •4.1. Історія мови sql та огляд її можливостей
- •4.2. Засоби пошуку даних
- •4.2.1. Основні конструкції мови, призначені для вибирання даних
- •4.2.2. Вирази, умови та оператори
- •4.2.3. Вибирання з кількох таблиць
- •4.2.4. Використання агрегатних функцій
- •4.2.5. Фраза group by. Групування таблиці за рядками
- •4.2.6. Фраза having. Умова вибирання для груп рядків
- •4.2.8. Порядок обчислення запитів
- •4.2.9. Підзапити
- •4.2.7. Фраза order by. Впорядкування рядків
- •4.2.10. Використання предикатів any, all, exists та in
- •4.2.11. Використання теоретико-множинних операторів
- •4.2.12. Запити, в яких реалізується квантор загальності
- •4.2.13, Використання невизначених значень
- •4.3. Засоби маніпулювання даними
- •4.3.1. Додавання рядків до таблиці. Оператор insert
- •4.3.2. Оновлення даних. Оператор update
- •4.3.3. Видалення рядків таблиці. Оператор delete
- •4.4. Операції над схемою бази даних
- •4.4.1. Створення бази даних. Оператор create database
- •4.4.2. Створення таблиці. Оператор create table
- •4.5.2. Використання індексів
- •4.6. Транзакції
- •4.6.1. Початок і завершення транзакції
- •4.6.2. Скасування транзакції. Точки збереження
- •4.7. Тригери
- •4.8. Додаткові можливості
4.2.12. Запити, в яких реалізується квантор загальності
Стандартна SQL не містить предикатів, що перевіряють чи є одна множина під-множиною іншої. За допомогою цих предикатів можна було б легко записувати запити, еквівалентні тим запитам реляційного числення, в яких використовується квантор V. У SQL для реалізації таких запитів застосовуються інші засоби.
Запит 4.36
Визначити викладачів, що читають лекції в усіх групах.
Цей запит можна сформулювати так: «Визначити викладачів, для яких не існує таких груп, де вони не читають лекції». Перша частина запиту «Визначити викладачів, для яких не існує таких груп, де...» реалізується в такий спосіб:
SELECT t.Прізвище FROM ВИКЛАДАЧ t
WHERE NOT EXISTS (SELECT *
FROM ГРУПА g
WHERE...)
Тепер слід записати вираз, який містить умову щодо групи. Для цього сформулюємо допоміжний запит: «Визначити групи, де не веде занять викладач з кодом X». Він подібний до вихідного запиту (за винятком того, що у даному запиті зазначається конкретний викладач):
SELECT *
FROM ГРУПА g
WHERE #G NOT IN (SELECT #G
FROM ЛЕКЦІЯ 1
WHERE 1,#T = "X")
Об'єднаємо обидва запити, вклавши другий запит у перший у такий спосіб: + фраза WHERE другого запиту замінює фразу WHERE вкладеного підзапиту першого запиту; ♦ у фразі WHERE другого запиту замість коду конкретного викладача (X) використовується код викладача з першого запиту (t.#T).
У результаті одержимо:
SELECT t.Прізвище FROM ВИКЛАДАЧ t
WHERE NOT EXISTS (SELECT * FROM ГРУПА g
WHERE #G NOT IN (SELECT #G
FROM ЛЕКЦІЯ 1
WHERE l.#T=t.#T))
4.2.13, Використання невизначених значень
Якщо під час введення даних не внести значення до поля таблиці, то СКБД розмістить там NULL-значення, або невизначене значення. Аналогічне значення може бути введене до поля таблиці під час виконання операції заміни даних. Мова SQL надає можливість маніпулювати невизначеними значеннями. При цьому NULL-значення не вважається рівним іншому null-значенню, тобто NULL = NULL не дорівнює TRUE (дорівнює логічному NULL), і N0TCNULL = NULL) також дорівнює логічному NULL. Незважаючи на це, два невизначені значення розглядаються як дублікати, коли необхідно видалити дублікати, і оператор SELECT DISTINCT дасть у результаті не більше одного NULL-значення. Для запису умов з невизначеними значеннями в SQL введені предикати IS та IS NOT, які можна використовувати з константою NULL. Наприклад, якщо потрібно підрахувати середню величину фонду кафедри за умови, що фонд задано, запит буде таким:
SELECT АУЄ(Фонд)
FROM КАФЕДРА
WHERE Фонд IS NOT NULL
Коли необхідно визначити кафедри, для яких не вказано величину фонду, потрібно записати:
SELECT Назва FROM КАФЕДРА
WHERE Фонд IS NULL
4.3. Засоби маніпулювання даними
Ми розглядали, в який спосіб дані вибираються з БД. Далі ми обговоримо, як дані можна вводити до БД, редагувати та видаляти. Мова йтиме про оператори SQL, що дають змогу маніпулювати даними: INSERT, UPDATE і DELETE.
