繁体   English   中英

SQL 中的 ANY 和 ALL 运算符有什么区别(在下面提到的情况下)

[英]What is the difference between ANY and ALL operators in SQL (in the below mentioned case)

使用ANY运算符查询 1

Select * from products
where price > Any (select price from products where price > 500)

使用ALL运算符查询 2

Select * from products
where price > All (select price from products where price > 500)

两个查询都是一样的,唯一的区别是操作符的变化。

查询 1没有产生任何结果(0 行)

查询 2为我提供了表中存在的所有行(77 行)

我无法理解上述现象,请帮助我理解这两个查询。

请参考以下样本数据:

产品编号 产品名称 价格

1 鼠标 10

2 键盘 21

3 交叉配合 45

4 椅子 123

5 表 263

从这里任何/所有

9.23.4。 任何/一些

...

右边是一个带括号的子查询,它必须只返回一列。 使用给定的运算符计算左侧表达式并与子查询结果的每一行进行比较,这必须产生 Boolean 结果。 如果获得任何真结果,则 ANY 的结果为“真”。 如果没有找到真结果(包括子查询不返回行的情况),则结果为“假”。

9.23.5。 全部

...

右边是一个带括号的子查询,它必须只返回一列。 使用给定的运算符计算左侧表达式并与子查询结果的每一行进行比较,这必须产生 Boolean 结果。 如果所有行都为真(包括子查询不返回任何行的情况),则 ALL 的结果为“真”。 如果发现任何错误结果,则结果为“错误”。 如果没有与子查询行的比较返回 false,并且至少一个比较返回 NULL,则结果为 NULL。

select price from products where price > 500不返回任何行。 所以在ANY情况下:

如果没有找到真结果(包括子查询不返回行的情况),则结果为“假”。

ALL情况下:

如果所有行都为真(包括子查询不返回任何行的情况),则 ALL 的结果为“真”。

这意味着对于ANY products都没有匹配项,并且在ALL情况下所有products都匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM