关于 #1 和 #2 (ALL) 的问题 嵌套选择 测验 来自 sqlzoo.net



我对使用来自sqlzoo的嵌套SELECT测验 ALL.In 有点困惑(链接在这里:)

Q1:选择显示每个区域中最小国家/地区的名称,区域和人口的代码

SELECT region, name, population FROM bbc x WHERE population <= ALL (SELECT 
population FROM bbc y WHERE y.region=x.region AND population>0)

我认为这对我来说是有道理的,因为我们试图获得小于每个地区最小国家的人口(首先使用内部子查询查询)。

但随后,Q2 出现了:选择显示属于所有人口超过 50000 的地区的国家/地区的代码

然后代码是:

SELECT name,region,population FROM bbc x WHERE 50000 < ALL (SELECT population 
FROM bbc y WHERE x.region=y.region AND y.population>0)

如果我们试图得到人口> 50000 的国家,为什么标志不是>而是<?

我觉得我在某个地方缺少了一个基本的理解,但我什至不确定在哪里。

如果可以这样写,它会更具可读性和更容易理解:

WHERE ALL (SELECT population....) > 50000

但这在语法上是错误的

从 https://oracle-base.com/articles/misc/all-any-some-comparison-conditions-in-sql

ALL 比较条件用于将值与列表或 子查询。
它前面必须有 =、!=、>、<、<=、>= 和 后跟列表或子查询。

也来自 https://learn.microsoft.com/en-us/sql/t-sql/language-elements/all-transact-sql?view=sql-server-2017
语法应为:

scalar_expression { = | <> | != |> |>= | !> | <|

<= | !<} ALL (子查询)


所以你不能避免在比较的右侧有ALL子句,
但这都是一样的,因为50000必须小于子查询中的每个项目。

对于第一个问题,population是第一个问题,因此当您查询"<=(小于或等于)所有总体的总体"时,这意味着它是最小的一个。

在第二个问题中,50000在比较中排在第一位。

"超过 50000

的人口"也意味着这些人口中有 50000 <,这正是它在查询中所说的。

相关内容

  • 没有找到相关文章

最新更新