SQL中ANY与ALL运算符差异解析:为何两查询结果截然不同?
两个SQL查询结果差异解析
首先明确核心前提:你的样本数据里所有产品价格最高为263,因此子查询 select price from products where price > 500 不会返回任何数据(是空集),这是导致两个查询结果差异的关键原因。
Query 1(使用ANY运算符)
SQL语句:
Select * from products where price > Any (select price from products where price > 500)
ANY 的逻辑是:只要当前行的price大于子查询结果里任意一个值,就会被筛选出来。但子查询是空集,没有任何值可用于比较,因此这个条件永远不成立,最终返回0行结果。
Query 2(使用ALL运算符)
SQL语句:
Select * from products where price > All (select price from products where price > 500)
ALL 的逻辑是:当前行的price要大于子查询结果里所有值。当子查询是空集时,相当于没有需要满足的“大于”条件——因为不存在任何值需要被当前行的price超过,所以所有行都符合该条件,最终返回表中全部77行数据。
内容的提问来源于stack exchange,提问作者Abhinav ojha
相关产品推荐
相关产品推荐

