- •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. Операція ділення
6. Використання операцій in і not in у нетривіальних запитах
Оператор IN використовується для порівняння деякого значення із списком значень; при цьому перевіряється, чи входить порівнюване значення в наданий список, чи ні.
Приклад. Визначити список товарів, які є на складі.
SELECT Товар.Назва
FROM Товар
WHERE КодТовару IN
(SELECT Склад.КодТовара FROM Склад);
Приклад. Визначити список товарів, яких немає на складі
SELECT Товар.Назва
FROM Товар
WHERE КодТовару NOT IN
(SELECT Склад.КодТовара FROM Склад);
Приклад. Визначити товари, які купують клієнти з Києва (але покупцями яких можуть бути і клієнти з інших місць).
SELECT DISTINCT Товар.Назва
FROM Товар,Угода, Клієнт
WHERE Клієнт.КодКлієнта=Угода.КодКлієнта AND
Товар.КодТовару=Угода.КодТовара AND Клієнт.МістоКлієнта='Київ';
SELECT DISTINCT Товар.Назва
FROM Товар,Угода
WHERE Товар.КодТовару=Угода.КодТовара AND Угода.КодКлієнта IN
(SELECT Клієнт.КодКлієнта
FROM Клієнт WHERE Клієнт.МістоКлієнта='Київ‘);
Приклад. Визначити товари, які купують лише клієнти з Києва.
Введення в запит фрази "лише (тільки)" вимагає використання операції NOT IN.
SELECT DISTINCT Товар.Назва,
Клієнт.МістоКлієнта
FROM Товар,Угода,Клієнт
WHERE Клієнт.КодКлієнта=Угода.КодКлієнта
AND Товар.КодТовару=Угода.КодТовара
AND Товар.Назва NOT IN
(SELECT Товар.Назва
FROM Товар, Угода. Клієнт
WHERE Клієнт.КодКлієнта=Угода.КодКлієнта
AND Товар.КодТовару=Угода.КодТовару
AND Клієнт.МістоКлієнта<>'Київ');
Приклад. Визначити товари, які жодного разу не купили клієнти з Києва.
Введення в запит фрази "жодного разу" вимагає використання операції NOT IN.
SELECT DISTINCT Товар.Назва,
Клієнт.МістоКлієнта
FROM Товар, Клієнт,Угода
WHERE Клієнт.КодКлієнта=Угода.КодКлієнта
AND Товар.КодТовару=Угода.КодТовару
AND Товар.Назва NOT IN
(SELECT Товар.Назва
FROM Товар, Клієнт, Угода
WHERE Клієнт.КодКлієнта=Угода.КодКлієнта
AND Товар.КодТовару=Угода.КодТовару
AND Клієнт.МістоКлієнта='Київ');
У вкладеному запиті визначається список товарів, що набувають клієнти з Києва. У зовнішньому запиті вибираються тільки ті товари, які не входять в цей список.
Приклад. Визначити фірми, які купують тільки товари, вироблені лише в своєму місті.
SELECT DISTINCT Клієнт.Фірма
FROM Товар, Клієнт, Угода
WHERE Клієнт.КодКлієнта=Угода.КодКлієнта
AND Товар.КодТовару=Угода.КодТовару
AND Клієнт.Фірма NOT IN
(SELECT DISTINCT Клієнт1.Фірма
FROM Товар AS Товар1, Клієнт AS Клієнт1, Угода AS Угода1
WHERE Клієнт1.КодКлієнта=Угода1.КодКлієнта
AND Товар1.КодТовару=Угода1.КодТовару
AND Клієнт1.МістоКлієнта<>Товар1.МістоТовару);
У вкладеному запиті визначається перелік фірм, що зробили хоча б одну покупку товару з чужого міста. Потім визначаються фірми, що не входять в цю множину.
