ANY 关键字是一个 MySQL 运算符,如果对任何子查询条件的比较为 TRUE,则返回布尔值 TRUE。换句话说,如果在执行 SQL 查询时满足任何子查询条件,则此关键字返回 true。ANY 关键字必须跟在比较运算符之后。需要注意的是,ALL SQL运算符的工作与 ANY 运算符相关,但当 MySQL 中的条件满足所有子查询值时,它返回 true。
ANY 运算符的工作方式类似于将表的值与子查询条件提供的结果集中的每个值进行比较。然后,如果它找到与子查询的至少一个值/行匹配的任何值,则返回 TRUE 结果。
句法
以下是说明在 MySQL 中使用 ANY 运算符的语法:
operand comparison_operator ANY (subquery)
其中比较运算符可以是以下之一:
= > < >= <= <> !=
这个语法也可以写成:
SELECT column_lists FROM table_name1 WHERE column_name Operator ANY (SELECT column_name FROM table_name2 WHERE condition);
我们可以通过以下语句了解 ANY 在MySQL 中的工作原理:
SELECT colm1 FROM table1 WHERE colm1 > ANY (SELECT colm1 FROM table2);
假设table1有一行包含数字 (10)。在这种情况下,如果table2包含 ( 20、15和 6) ,则上述表达式返回true。这是因为 table2 中有一个值 6,它小于 10。如果 table2 包含 (15, 20),或者如果 table2 为空,则此表达式返回false。如果所有表字段都包含 (NULL, NULL, NULL),则此表达式为unknown。
例子
让我们创建一个名为table1和table2的两个表,然后使用以下语句向其中插入一些值:
CREATE TABLE table1 (
num_value INT
);
INSERT INTO table1 (num_value)
VALUES(10), (20), (25);
CREATE TABLE table2 (
num_val int
);
INSERT INTO table2 (num_val)
VALUES(20), (7), (10);
上述语句执行成功后,我们可以使用SELECT语句进行验证,如下所示:
现在,我们将执行以下语句来了解 ANY 运算符的使用:
SELECT num_value FROM table1
WHERE num_value > ANY (SELECT num_val FROM table2);
此语句返回 true 并给出以下输出,因为 table2 包含(20、10 和 7)并且 table2 中有一个值 7,它小于 table1 的 10、20 和 25。
当与语句中的子查询一起使用时,MySQL 中的IN 关键字是= ANY的别名。因此,以下两条语句在 MySQL 中是相同的:
SELECT colm1 FROM table1 WHERE colm1 = ANY (SELECT colm1 FROM table2);
SELECT colm1 FROM table1 WHERE colm1 IN (SELECT colm1 FROM table2);
但是当我们将它与表达式列表一起使用时,我们不能说 IN 和 = ANY 是同义词。这是因为 IN 可以接受表达式列表,但 = ANY 不能。
此外,NOT IN不能作为<> ANY运算符的别名,但可以用于<> ALL。
这个词SOME在MySQL可以对任意的别名。因此,这两条SQL语句是等价的:
SELECT colm1 FROM table1 WHERE colm1 <>ANY (SELECT colm1 FROM table2);
SELECT colm1 FROM table1 WHERE colm1 <> SOME (SELECT colm1 FROM table2);
MySQL 中 ANY 运算符的优点
- ANY 是返回布尔值的逻辑运算符。它允许我们选择 SELECT 语句的任何或某些行。
- 由于比较运算符在此运算符之前,因此如果任何子查询满足指定条件,它总是返回 TRUE。
- 它提供结果,它是来自与第二个表中的任何记录匹配的表中的唯一列值。
- 我们可以使用带有 SELECT 和 WHERE 关键字的 ANY 运算符执行多次比较。
在本文中,我们学习了如何在 MySQL 中使用 ANY 运算符。仅当任何值满足条件时,它才从 SQL 语法过滤结果集。否则,它给出一个错误的值。