Spec-Zone .ru
спецификации, руководства, описания, API
|
Синтаксис:
operand
comparison_operator
ANY (subquery
)operand
IN (subquery
)operand
comparison_operator
SOME (subquery
)
Где comparison_operator
один из этих операторов:
= > < >= <= <> !=
ANY
ключевое слово, которое должно следовать за оператором сравнения, означает "возврат TRUE
если сравнение TRUE
для ANY
из значений в столбце, который возвращает подзапрос."
Например:
SELECT s1 FROM t1 WHERE s1 > ANY (SELECT s1 FROM t2);
Предположите, что есть строка в таблице t1
содержа (10)
. Выражение TRUE
если таблица t2
содержит (21,14,7)
потому что есть значение 7
в t2
это - меньше чем 10
. Выражение FALSE
если таблица t2
содержит (20,10)
, или если таблица t2
пусто. Выражение неизвестно (то есть, NULL
) если таблица
t2
содержит (NULL,NULL,NULL)
.
Когда использующийся с подзапросом, словом IN
псевдоним для =
ANY
. Таким образом эти два оператора являются тем же самым:
SELECT s1 FROM t1 WHERE s1 = ANY (SELECT s1 FROM t2);SELECT s1 FROM t1 WHERE s1 IN (SELECT s1 FROM t2);
IN
и = ANY
не синонимы когда использующийся со списком
выражения. IN
может взять список выражения, но = ANY
не может. См. Раздел 12.3.2, "Функции сравнения и
Операторы".
NOT IN
не псевдоним для <> ANY
, но для <> ALL
. См. Раздел 13.2.10.4, "Подзапросы
с ALL
".
Слово SOME
псевдоним для ANY
. Таким образом эти два
оператора являются тем же самым:
SELECT s1 FROM t1 WHERE s1 <> ANY (SELECT s1 FROM t2);SELECT s1 FROM t1 WHERE s1 <> SOME (SELECT s1 FROM t2);
Использование слова SOME
редко, но этот пример шоу, почему это могло бы быть
полезно. Большинству людей английская фраза "не равный любому b" означает, что "нет никакого b, который равен a," но это не то, что предназначается
синтаксисом SQL. Синтаксис означает, что "есть некоторый b к который не равен."
Используя <> SOME
вместо этого помогает гарантировать, что все понимают
значение истины запроса.