句法:
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
if table t2
contains
(21,14,7)
因为其中有一个
值小于
7
。表达式是
if table contains
,或者 if table为空。如果表包含
,则表达式未知(即
) 。
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.4.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
很少用到,但这个例子说明了为什么它可能有用。对于大多数人来说,英语短语“ a is not equal to any b ”的意思是
“不存在等于 a 的 b ” ,但这不是 SQL 语法的意思。语法意思是
“有一些 b 不等于 a。”使用
<> SOME
instead 有助于确保每个人都理解查询的真正含义。