MySQL 8.4 发行说明
语法
operand comparison_operator ANY (subquery)
operand IN (subquery)
operand comparison_operator SOME (subquery)其中 comparison_operator 是以下运算符之一:
= > < >= <= <> !=ANY 关键字必须跟在比较运算符之后,表示 “如果比较结果对于子查询返回的列中的 ANY 值为 TRUE,则返回 TRUE。” 例如:
SELECT s1 FROM t1 WHERE s1 > ANY (SELECT s1 FROM t2);假设表 t1 中有一行包含 (10)。如果表 t2 包含 (21,14,7),则表达式为 TRUE,因为 t2 中有一个值 7 小于 10。如果表 t2 包含 (20,10),或者表 t2 为空,则表达式为 FALSE。如果表 t2 包含 (NULL,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 不能。请参阅 第 14.4.2 节,“比较函数和运算符”。
NOT IN 并非 <> ANY 的别名,而是 <> ALL 的别名。参见 第 15.2.15.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 不等于任何 b” 意思是 “没有 b 等于 a,” 但这不是 SQL 语法的含义。该语法的含义是 “存在某个 b 不等于 a。” 使用 <> SOME 有助于确保每个人都理解查询的真正含义。
如果表仅包含一列,则可以在标量 IN、ANY 或 SOME 子查询中使用 TABLE。如果 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);