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

2 Використовування підзапитів, що повертають безліч значень

У багатьох випадках значення, що підлягає порівнянню в пропозиціях WHERE або HAVING, є не одним, а декілька значень. Вкладені підзапити генерують непойменоване проміжне відношення, тимчасову таблицю. Воно може використовуватися тільки в тому місці, де з'являється в підзапиті. До такого відношення неможливо звернутися на ім'я з якого-небудь іншого місця запиту. Вживані до підзапиту операції засновані на тих операціях, які, у свою чергу, застосовуються до множини, а саме:

{WHERE | HAVING} вираз [NOT] IN (підзапит);

{WHERE | HAVING} вираз оператор_порівняння {ALL |SOME| ANY} (підзапит);

{WHERE | HAVING} [NOT] EXISTS ( підзапит );

3 Використовування операцій in і not in

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

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

SELECT Назва

FROM Товар

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

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

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

SELECT Назва

FROM Товар

WHERE КодТовара Not In (SELECT КодТовара FROM Склад)

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

Приклад 7.9. Визначити товари, які купують клієнти з Москви.

SELECT DISTINCT Товар.Назва Клієнт.МістоКлієнта

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

WHERE Клієнт.МістоКлієнта='Москва'

Приклад 7.9. Визначення товарів, які купують клієнти з Москви.

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

Введення в запит фрази "тільки" вимагає використовування операції NOT IN.

Приклад 7.10. Визначити товари, покупку яких здійснюють тільки клієнти з Москви, і ніхто інший.

SELECT DISTINCT Товар.Назва Клієнт.МістоКлієнта

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

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

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

WHERE Товар.Назва NOT IN (SELECT Товар.Назва

FROM Товар INNER JOIN (Клієнт INNER JOIN Операція ON Клієнт.КодКлієнта=Операція.КодКлієнта) ON Товар.КодТовара=Операція.КодТовара WHERE Клієнт.МістоКлієнта<>'Москва')

Приклад 7.10. Визначення товарів, покупку яких здійснюють тільки клієнти з Москви, і ніхто інший.

Приклад 7.11. Які товари жодного разу не купили московські клієнти?

SELECT DISTINCT Товар.Назва Клієнт.МістоКлієнта

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

WHERE Товар.Назва NOT IN (SELECT Товар.Назва

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

WHERE Клієнт.МістоКлієнта='Москва')

Приклад 7.11. Визначення товарів, які жодного разу не купили московські клієнти?

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

Приклад 7.12. Визначити фірми, що купують товари місцевого виробництва.

SELECT DISTINCT Клієнт.Фірма, Клієнт.МістоКлієнта, Товар.МістоТовара

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

WHERE Клієнт.МістоКлієнта=Товар.МістоТовара

Приклад 7.12. Визначення фірм, що купують товари місцевого виробництва.

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

Введемо в запит фразу "тільки" – відразу буде потрібно залучення операції NOT IN.

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

SELECT DISTINCT Клієнт.Фірма Клієнт.МістоКлієнта, Товар.МістоТовара

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

WHERE Клієнт.МістоКлієнта NOT IN (SELECT DISTINCT Клієнт.МістоКлієнта

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

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

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

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