Оператор EXISTSиспользуется для указания предикату на то, чтобы производить или не производить вывод в подзапросе, при этом EXISTS дает в качестве результата значение ИСТИНА или ЛОЖЬ. Он может работать в предикате или в комбинации с другими булевскими выражениями –AND, OR и NOT.
Пример 1.Нужно решить, извлекать ли данные из таблицы успеваемости, если в ней присутствуют отличные оценки.
В соотнесенном подзапросе, предложение EXISTS оценивается отдельно для каждой строки таблицы, имя которой указано во внешнем запросе, точно так же, как и другие операторы предиката, когда используется соотнесенный подзапрос.
Пример 2. Вывести информацию о студентах, которые имеют несколько оценок:
SELECT DISTINCT SNUM
FROMUSP FIRST
WHEREEXISTS
(SELECT *
FROM USP SECOND
WHERESECOND. SNUM= FIRST. SNUM
AND SECOND / PNUM < > FIRST. PNUM);
Результат запроса:
SNUM
--------
Для иллюстрации возможности использования комбинации из EXISTS и объединения. Усовершенствуем последний пример таким образом, чтобы выводилась более подробная информация о студентах:
Важным свойством EXISTSявляется то, что он не может взять агрегатную функцию в подзапросе, так как если агрегатная функция нашла какие-либо записи для операций с ними, то EXISTSбудет верен в любом случае. Выходом их такой ситуации является использование вложенного подзапроса в подзапросе, в предикате которого присутствует EXISTS.Этопозволяет тщательно структурировать запросы, делая их более понятными.
Пример 4. Получить информацию о студентах, имеющих более одной оценки.