SQL比较<= all(布尔结果)与> = all(布尔结果)提供不同的结果

时间:2020-05-12 19:10:01

标签: sql

在SQLZoo上,我找到了一个我不明白的问题的答案。问题是:

“按字母顺序列出每个大洲和国家名称。”

数据表:

enter image description here

答案是:

Select  x.continent, x.name
From world x
Where x.name <= ALL (select y.name from world y where x.continent=y.continent)
ORDER BY name 

产生此表: enter image description here

如果我更改查询以使比较运算符为:“ ... x.name> = ALL(..”,而不是“” ... x.name <= ALL(...“),却给我提供了每个大陆上字母顺序最低的国家(例如津巴布韦代表非洲大陆),我不明白为什么它们会有不同的结果

在查询中带有> =:enter image description here

所以我不明白,需要帮助的是:

a)为什么在处理这些字符串时允许使用此比较运算符?是因为这里的子查询实际上是布尔测试吗?

b)比比较本身多多少少会影响第二个查询中出现的国家/地区表的排序或搜索顺序?因为这是我认为这种行为正在发生的唯一方法

任何对增进我对此理解的帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

首先,它有助于理解这一点:

 Where x.name <= ALL (select y.name from world y where x.continent=y.continent)

基本上等同于:

where x.name = (select min(y.name) from world y where x.continent=y.continent)

我认为这是更常用的(子查询中没有匹配项时会有区别)。

但是回到第一种形式。如果删除=,则不会返回任何行:

 Where x.name < ALL (select y.name from world y where x.continent=y.continent)

为什么?因为没有name少于其大陆上的所有名称。这是一种重言式,因为name本身位于非洲大陆,并且不小于其自身。

这可能使您了解正在发生的事情以及<=>=不同的原因。对于>=,您要查找的名称比所有名称(除了其本身)大 。那将是最大名称,而不是最小名称。

相关问题