Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.Б.Д / лекции / 8БД.doc
Скачиваний:
33
Добавлен:
30.05.2020
Размер:
71.68 Кб
Скачать

4 Використовування ключових слів any і all

Ключові слова ANY і ALL можуть використовуватися з підзапитами, що повертають один стовпець чисел.

Якщо підзапиту передуватиме ключове слово ALL, умова порівняння вважається виконаною, тільки коли воно виконується для всіх значень в результуючому стовпці підзапиту.

Якщо запису підзапиту передує ключове слово ANY, то умова порівняння вважається виконаною, коли воно виконується хоча б для одного із значень в результуючому стовпці підзапиту.

Якщо в результаті виконання підзапиту набуто порожнього значення, то для ключового слова ALL умова порівняння вважатиметься виконаною, а для ключового слова ANY – невиконаним. Ключове слово SOME є синонімом слова ANY.

Приклад 7.14. Визначити клієнтів, що вчинили операції з максимальною кількістю товару (еквівалентно запиту 7.3.)

SELECT Клієнт.Прізвище, Операція.Кількість

FROM Клієнт INNER JOIN Операція ON Клієнт.КодКлієнта=Операція.КодКлієнта

WHERE Операція.Кількість>=ALL(SELECT Кількість FROM Операція)

Приклад 7.14. Визначення клієнтів, що вчинили операції з максимальною кількістю товару.

В прикладі визначені клієнти, в операціях яких кількість товару більше або рівно кількості товару в кожній зі всіх операцій.

Приклад 7.15. Знайти фірму, що купила товарів на суму, що перевищує 10000 крб.

SELECT Клієнт.Фірма Sum(Товар.Цена*Операція.Кількість) AS Общ_вартість

FROM Товар INNER JOIN (Клієнт INNER JOIN Операція ON Клієнт.КодКлієнта=Операція.КодКлієнта) ON Товар.КодТовара=Операція.КодТовара

GROUP Клієнт.Фірма

HAVING Sum(Товар.Цена*Операція.Кількість) >10000

Приклад 7.15. Визначення фірми, що купила товарів на суму, що перевищує 10000 крб.

Додамо в запит підзапит.

Приклад 7.16. Знайти фірму, яка придбала товарів на найбільшу суму.

SELECT Клієнт.Фірма Sum(Товар.Цена*Операція.Кількість) AS Заг_вартість

FROM Товар INNER JOIN (Клієнт INNER JOIN Операція ON Клієнт.КодКлієнта=Операція.КодКлієнта) ON Товар.КодТовара=Операція.КодТовара

GROUP Клієнт.Фірма

HAVING Sum(Товар.Цена*Операція.Кількість) >=

ALL(SELECT Sum(Товар.Цена*Операція.Кількість)

FROM Товар INNER JOIN Операція

ON Товар.КодТовара=Операція.КодТовара

GROUP Операція.КодКлієнта)

Приклад 7.16. Визначення фірми, яка придбала товарів на найбільшу суму.

Вкладений підзапит підраховує загальну вартість покупок кожного клієнта. Зовнішній підзапит також підраховує загальну вартість покупок кожного клієнта і визначає тих, для кого ця сума, в порівнянні з іншими покупцями, виявилася більше або точно такій же.

Приклад 7.17. Знайти фірми, в операціях яких кількість товару перевищує такий же показник хоча б в одній операції клієнтів з Самари.

SELECT Клієнт.Фірма, Операція.Кількість

FROM Клієнт INNER JOIN Операція ON Клієнт.КодКлієнта=Операція.КодКлієнта

WHERE Операція.Кількість > ANY(SELECT Операція.Кількість

FROM Клієнт INNER JOIN Операція ON Клієнт.КодКлієнта=Операція.КодКлієнта

WHERE Клієнт.МістоКлієнта='Самара')

Приклад 7.17. Визначення фірм, в операціях яких кількість товару перевищує такий же показник хоча б в одній операції клієнтів з Самари.

Використовування операцій EXISTS і NOT EXISTS

Ключові слова EXISTS і NOT EXISTS призначені для використовування тільки спільно з підзапитами. Результат їх обробки є логічним значенням TRUE або FALSE. Для ключового слова EXISTS результат рівний TRUE в тому і лише в тому випадку, якщо в результуючій таблиці, що повертається підзапитом, присутній хоча б один рядок. Якщо результуюча таблиця підзапиту порожня, результатом обробки операції EXISTS буде значення FALSE. Для ключового слова NOT EXISTS використовуються правила обробки, зворотні по відношенню до ключового слова EXISTS . Оскільки за ключовими словами EXISTS і NOT EXISTS перевіряється лише наявність рядків в результуючій таблиці підзапиту, то ця таблиця може містити довільну кількість стовпців.

Приклад 7.18. Визначити список товарів, що є на складі (запит еквівалентний прикладу 7.7).

SELECT Назва

FROM Товар

WHERE EXISTS (SELECT КодТовара FROM Склад

WHERE Товар.КодТовара=Склад.КодТовара)

Приклад 7.18. Визначення списку товарів, що є на складі.

Приклад 7.19. Визначити список відсутніх на складі товарів (запит еквівалентний прикладу 7.8).

SELECT Назва

FROM Товар

WHERE NOT EXISTS (SELECT КодТовара FROM Склад

WHERE Товар.КодТовара=Склад.КодТовара)

Приклад 7.19. Визначення списку відсутніх на складі товарів.

Контрольні питання

  1. Дайте визначення підзапиту та поясніть його призначення.

  2. Чи є які правила створення підзапиту? Які саме?

  3. На які типи поділяють підзапити?

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

  5. Що таке табличні підзапити? В чому їх особливість?

  6. Яким чином підзапит може повернути більш одного значення7

  7. Яким чином працюють параметри IN і NOT IN? Яким чином вони змінюють результат запиту?

  8. Яким чином працюють параметри ANY і ALL? Яким чином вони змінюють результат запиту?

Соседние файлы в папке лекции