Як вже доводилося вище, ці підзапити представляють собою тест на існування рядків чи не існування рядків в результаті виконання внутрішнього запиту. Якщо відповідь позитивна, то виконується зовнішній запит, у протилежному випадку він не виконується, тобто результатна таблиця буде пустою. Таким чином, застосування квантора EXISTS аналогічно оператору розгалуження в процедурних мовах програмування IF <умова> THEN <дія>, але складові конструкції стоять у зворотному порядку: <дія> IF <умова>. Звідси витікає, що після ключового слова WHERE відсутній атрибут для порівняння, після WHERE одразу пишеться ключове слово EXISTS, після якого в дужках записується оператор SELECT. Тому зрозуміло правило, за яким після опції SELECT можна ставити символ “*”, тому що немає значення, скільки атрибутів ми задамо – результатна таблиця буде пустою або не пустою, що і визначає, чи буде включатися зовнішній оператор SELECT, чи ні.
Приклад. Отримати список викладачів кафедри №2 та їх посад при умові, що на цій кафедрі є хоча б один викладач, код посади якого „02” (доцент).
SELECT VYKLADACH.PrizvVykl, POSADA.PostVykl
FROM VYKLADACH INNER JOIN POSADA ON VYKLADACH.KodPost = POSADA.KodPost
WHERE ((( VYKLADACH.NomKaf)=2) AND ((Exists (SELECT * FROM VYKLADACH where ((KodPost="02") AND (NomKaf=2))))=True));
| PrizvVykl
| PostVykl
|
| Опришко Ю.Й.
| доцент
|
| Балагура А.М.
| викладач
|
| Черно Ф.М.
| викладач
|
Ті ж самі результати отримаємо, якщо при кванторі Exists в останньому рядку запиту поміняємо умову “=True” на “<>False”, або замість квантора Exists застосуємо квантор Not Exists разом з умовою “<>True” або “=False”.
Якщо в наведеному вище запиті змінимо тільки Exists на Not Exists, то отримаємо пусту таблицю.