Spec-Zone .ru
спецификации, руководства, описания, API

13.2.10.4. Подзапросы с ALL

Синтаксис:

operand comparison_operator ALL (subquery)

Слово ALL, то, который должен следовать за оператором сравнения, означает "возврат TRUE если сравнение TRUE для ALL из значений в столбце, который возвращает подзапрос." Например:

SELECT s1 FROM t1 WHERE s1 > ALL (SELECT s1 FROM t2);

Предположите, что есть строка в таблице t1 содержа (10). Выражение TRUE если таблица t2 содержит (-5,0,+5) потому что 10 больше чем все три значения в t2. Выражение FALSE если таблица t2 содержит (12,6,NULL,-100) потому что есть единственное значение 12 в таблице t2 это больше чем 10. Выражение неизвестно (то есть, NULL) если таблица t2 содержит (0,NULL,1).

Наконец, выражение TRUE если таблица t2 пусто. Так, следующее выражение TRUE когда таблица t2 пусто:

SELECT * FROM t1 WHERE 1 > ALL (SELECT s1 FROM t2);

Но это выражение NULL когда таблица t2 пусто:

SELECT * FROM t1 WHERE 1 > (SELECT s1 FROM t2);

Кроме того, следующее выражение NULL когда таблица t2 пусто:

SELECT * FROM t1 WHERE 1 > ALL (SELECT MAX(s1) FROM t2);

Вообще, таблицы, содержащие NULL значения и пустые таблицы являются "граничными случаями." При записи подзапросов всегда рассматривайте, приняли ли Вы те две возможности во внимание.

NOT IN псевдоним для <> ALL. Таким образом эти два оператора являются тем же самым:

SELECT s1 FROM t1 WHERE s1 <> ALL (SELECT s1 FROM t2);SELECT s1 FROM t1 WHERE s1 NOT IN (SELECT s1 FROM t2);