第四关 select in select
- 世界各国信息数据库表
name(国家名) | continent(州份) | area(面积) | population(人口) | dgp(国民生产总值) |
---|---|---|---|---|
Afghanistan | Asia | 652230 | 25500100 | 20343000000 |
Albania | Europe | 28748 | 2831741 | 12960000000 |
Algeria | Africa | 2381741 | 37100000 | 188681000000 |
… | … | … | … | … |
4.1 题目及答案
- 列出每个国家的名字name,当中人口population是高于俄罗斯‘Russia’的人口。
SELECT name FROM world
WHERE population >
(SELECT population FROM world
WHERE name='Russia')
- 列出欧洲每个国家的人均GDP,当中人均GDP要高于英国“United Kingdom”的数值。
select name from world
where continent = 'europe' and gdp/population
>(select gdp/population from world
where name = 'United Kingdom')
- 在阿根廷Argentina 及 澳大利亞 Australia所在的洲份中,列出當中的國家名字 name 及洲分 continent 。按國字名字順序排序
select name,continent from world
where continent in
((select continent from world where name = 'argentina')
,(select continent from world where name = 'australia'))
order by name
- 哪一個國家的人口比加拿大Canada的多,但比波蘭Poland的少?列出國家名字name和人口population 。
select name,population from world
where population > (select population from world where name = 'Canada')
and population < (select population from world where name = 'Poland')
- Germany德國(人口8000萬),在Europe歐洲國家的人口最多。Austria奧地利(人口850萬)擁有德國總人口的11%。
顯示歐洲的國家名稱name和每個國家的人口population。以德國的人口的百分比作人口顯示
select name
,concat
(round
(population
/(select population from world where name = 'Germany')*100,0),'%')
from world where continent = 'Europe'
- 哪些國家的GDP比Europe歐洲的全部國家都要高呢? [只需列出 name 。] (有些國家的記錄中,GDP是NULL,沒有填入資料的。)
select name
from world where gdp > all
(select gdp from world where continent = 'Europe'and gdp > 0 )
- 在每一個州中找出最大面積的國家,列出洲份 continent, 國家名字 name 及面積 area。 (有些國家的記錄中,AREA是NULL,沒有填入資料的。)
SELECT continent, name, area FROM world x
WHERE area >= ALL
(SELECT area FROM world y
WHERE x.continent=y.continent AND area>0)
理解:先找出每个州份所有国家的面积,再从中取出最大值
- 列出洲份名稱,和每個洲份中國家名字按子母順序是排首位的國家名。(即每洲只有列一國)
- 解题一:
select continent,name
from world x where name
<= all(select name from world y where x.continent = y.continent )
理解:按字母排序相当于字符串排序(a<b<c<d…<x<y<z)
- 解题二:
select continent,name
from world x where name
= (select name from world y
where x.continent = y.continent order by name limit 1)
理解:先找出所有州的国家名称,并按名称排序后,取得第一个。
- 困难的题目
- 找出洲份,當中全部國家都有少於或等於 25000000 人口. 在這些洲份中,列出國家名字name,continent 洲份和population人口
SELECT name,continent,population
FROM world x
WHERE 25000000>= all(SELECT population
FROM world y
WHERE x.continent = y.continent and population>0)
理解:all是运算符,用法类似>,=,+,-。先取得每个州所以国家的人口数集,再跟25000000比较
- 有些國家的人口是同洲份的所有其他國的3倍或以上。列出 國家名字name 和 洲份 continent。
select name,continent
from world x where x.population/3
>= all(select population from world y
where x.continent = y.continent
and x.name!=y.name and y.population>0)
4.2总结
函数 | 用法说明 |
---|---|
all | ALL运算符用于将值与另一个值集中的所有值进行比较 |
limit | 用于取出表中前n个数据或者是n后面y条数据 (包含n) |