如何理解我在查询中需要做什么

时间:2013-06-17 14:04:24

标签: mysql database

我有一张桌子(取自sqlzoo.net ),

+-------------+-----------+------------+------------+-------------------+
| name        | continent | area       | population | gdp               |
+-------------+-----------+------------+------------+-------------------+
| Afghanistan | Asia      | 652230.000 |   25500100 | 20343000000.00000 |
| Albania     | Europe    |  28748.000 |    2831741 | 12960000000.00000 |
+-------------+-----------+------------+------------+-------------------+
...

,查询是,

  

查找属于所有人口的大陆的每个国家/地区   小于25000000.显示名称,大陆和人口

我打破了查询,如下,

  • 查找所有人口小于25000000(子查询)的所有大陆
  • 显示来自这些大洲的国家/地区(外部查询)的详细信息(名称,大陆和人口)。

当我尝试编写查询时,我最终会这样,

外部查询似乎很好,

select name,continent,population from world where continent IN

内部查询让我感到困惑。

 (select continent from world where population<25000000) 

这是不正确的,因为它不检查一个大陆内的所有种群是否满足约束(我想检查一个大陆内的所有行,如果所有满足都包括IN列表中的大陆名称)。 //我知道如何在C //中做到这一点// 我如何在SQL中执行此操作?

注意:如果有有用的链接,请包含它们。解释查询执行情况的权限(与for循环如何在C中工作一样明确 - 分配,增量,检查,循环')将非常有用

4 个答案:

答案 0 :(得分:3)

补充fthiella优秀答案的另一种选择:

SELECT name, continent, population FROM world w1
WHERE 25000000 > ALL (
    SELECT population FROM world
    WHERE w1.continent = continent)

答案 1 :(得分:2)

你可以使用这样的查询:

SELECT name, continent, population
FROM   world
WHERE  continent IN (SELECT continent
                     FROM   world
                     GROUP BY continent
                     HAVING COUNT(*)=SUM(population<25000000))

子查询将仅返回所有人口少于25000000的国家。

COUNT(*)将是每个大洲所有行的计数(如果没有重复,则它将是该大陆所有国家/地区的计数)。

SUM(population<25000000)将是人口数小于25000000的大陆的数量,因为如果条件为真,则人口&lt; 25000000将返回1,否则返回0。

或者你也可以使用它:

SELECT name, continent, population
FROM   world
WHERE  NOT EXISTS (SELECT NULL FROM world w1
                   WHERE w1.continent = world.continent
                         AND population>25000000)

答案 2 :(得分:0)

我似乎已经cheat page通过 googling 在线搜索

它说,

SELECT name,continent,population FROM world x
  WHERE 25000000 >= ALL (
    SELECT population FROM world y
     WHERE x.continent=y.continent
       AND y.population>0)

把它放在这里引用这个问题的人

答案 3 :(得分:0)

尝试一下:

select name, continent, population
from world x
where continent in (select continent
from world
group by continent
having max(population) <= 25000000)