句法:
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.11.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 有助于确保每个人都理解查询的真正含义。
从 MySQL 8.0.19 开始,您可以
TABLE
在标量
IN
、ANY
或
SOME
子查询中使用,前提是表仅包含一个列。如果t2
只有一列,则本节前面显示的语句可以按此处所示编写,在每种情况下都替换TABLE
t2
为SELECT s1 FROM t2
:
SELECT s1 FROM t1 WHERE s1 > ANY (TABLE t2);
SELECT s1 FROM t1 WHERE s1 = ANY (TABLE t2);
SELECT s1 FROM t1 WHERE s1 IN (TABLE t2);
SELECT s1 FROM t1 WHERE s1 <> ANY (TABLE t2);
SELECT s1 FROM t1 WHERE s1 <> SOME (TABLE t2);