Spec-Zone .ru
спецификации, руководства, описания, API
|
Синтаксис:
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);