Оператор EXISTS используется, чтобы указать предикату, производить ли подзапросу вывод или нет. В этой главе вы узнаете, как использовать этот оператор со стандартными и (обычно) соотнесёнными подзапросами. EXISTS это оператор, который производит верное или неверное значение, другими словами, булево выражение .Это означает, что он может работать автономно в предикате или в комбинации с другими выражениями, использующими булевы операторы AND, OR и NOT. Он берет подзапрос как аргумент и оценивает его как верный, если тот производит любой вывод, или как неверный, если тот не делает этого. Этим он отличается от других операторов предиката, в которых он не может быть неизвестным. Результатом оператора EXISTS является TRUE или FALSE/,т.е. булево значение(логическое).
Во внешнем предикате определяет, что подзапрос вывел к-л. данные, и обращает в предикат TRUE, подзапрос(некорелированный) выполняется только 1 раз для всего внешнего запроса, и следовательно, всегда выводит единственное значение. Поскольку при таком использовании EXISTS обращает предикат в TRUE или FALSE сразу для всех строк, он не слишком полезен при извлечении конкретной информации. По этой причине он обычно применяется с коррелированными запросами. ANY и ALL напоминают EXISTS который воспринимает подзапросы как аргументы; однако они отличаются от EXISTS тем, что используются совместно с реляционными операторами. В этом отношении, они напоминают оператор IN когда тот используется с подзапросами; они берут все значения выведенные подзапросом и обрабатывают их как модуль. Однако, в отличие от IN, они могут использоваться только с подзапросами. Оператор ANY берет все значения выведенные подзапросом. Оператор ANY принимает все значения, выводимые подзапросом и обращается в TRUE, если хотя бы одно из них равно значению столбца в текущей строке внешнего запроса.
Оператор ALL - при использовании этого
оператора предикат внешнего запроса обращается в TRUE, когда каждое из
значений, выбранных подзапросом, удовлетворяет условию этого предиката.
Он использовался главным образом с неравенствами, т.к. равенство
некоторого значения всем результатам подзапроса возможно только в том
случае, когда рез-ты идентичны.
Реакция ANY ALL EXISTS на отсутствие
результатов: эти операторы по-разному обрабатывают NULL-значения. Кроме
того, ANY и ALL неодинаково реагируют на отсутствие результатов
подзапроса. Если не учитывать эти различия, то запросы могут выдавать
совершенно неожиданные результаты.