======= С ОТСУТСТВУЮЩИМИ И =======
НЕИЗВЕСТНЫМИ ДАННЫМИ
Как было сказано, имеются некоторые различия между EXISTS и операторами представленными в этой главе относительно того как они обрабатывают оператор NULL. ANY и ALL также отличаются друг от друга тем как они реагируют если подзапрос не произвел никаких значений чтобы использовать их в сравнении. Эти различия могут привести к непредвиденным результатам на Ваши запросы если вы не будете их учитывать.
КОГДА ПОДЗАПРОС ВОЗВРАЩАЕТСЯ ПУСТЫМ
Одно значительное различие между ALL и ANY - способ действия в cитуации когда подзапрос не возвращает никаких значений. В принципе, всякий раз, когда допустимый подзапрос не в состоянии сделать вывод, ALL - автоматически
верен, а ANY автоматически неправилен. Это означает, что следующий запрос
SELECT *
FROM Customers
WHERE rating > ANY
( SELECT rating
FROM Customers
WHERE city = Boston );
не произведет никакого вывода, в то время как запрос -
SELECT
FROM Customers
WHERE rating > ALL
( SELECT rating
FROM Customers
WHERE city = 'Boston' );
выведет всю таблицу Заказчиков. Когда нет никаких заказчиков в Boston, естественно, ни одно из этих сравнений не имеет значення.
ANY И ALL ВМЕСТО EXISTS С