Стандартна 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))