- •1. Побудова нетривіальних запитів. Поняття нетривіального запиту та підзапиту
- •2. Типи підзапитів. Прості і корельовані підзапити
- •3. Скалярні підзапити. Функції в підзапиті
- •4. Підзапити у реченні having
- •5. Табличні підзапити
- •6. Використання операцій in і not in у нетривіальних запитах
- •7. Використання ключових слів any та all
- •8. Використання операцій exists (exist) та not exists
- •9. Реалізація операцій реляційної алгебри засобами sql
- •9.1. Операція вибірки
- •9.2. Операція проекції
- •9.3. Операція об'єднання
- •9.4. Операція взяття різниці
- •9.5. Операція перетину
- •Intersect
- •9.6. Декартів добуток таблиць
- •9.7. Операція з'єднання
- •9.8. Операція ділення
9.8. Операція ділення
Операція ділення може бути реалізована реченням SELECT з корельованими вкладеними підзапитами з використанням предикату EXISTS.
Реляційна алгебра: A(X,Y) DEVIDE BY B(Y)
Оператор SQL:
SELECT DISTINCT A.X
FROM A
WHERE NOT EXIST
(SELECT *
FROM B
WHERE NOT EXIST
(SELECT *
FROM A as A1
WHERE A1.X = A.X
AND A1.Y = B.Y));
Такі конструкції необхідні у запитах зі словом “всі”.
Приклад. Вибрати
імена та прізвища клієнтів, які купили
всі товари (товари всіх назв).
SELECT DISTINCT Клієнт.Прізвище, Клієнт.Ім’я
FROM Клієнт
WHERE NOT EXIST
(SELECT *
FROM Товар
WHERE NOT EXIST
(SELECT *
FROM Угода
WHERE Угода.КодТовару = Товар.КодТовару
AND Угода.КодКлієнта = Клієнт.КодКлієнта));
