第 4关 SELECT within SELECT Tutorial - SQLZOO
练习select嵌套select,也就是子查询。
-- List each country name where the population is larger than that of 'Russia'.
-- 练习where子查询, 从子查询里筛选数值。
select name
from world
where population >
(select population
from world
where name = 'Russia')
-- Show the countries in Europe with a per capita GDP greater than 'United Kingdom'.
-- 练习 where +and + 子查询 , 从子查询里筛选数值。
select name
from world
where continent = 'Europe'
and gdp/population >
(select gdp/population
from world
where name = 'United Kingdom')
-- List the name and continent of countries in the continents containing either Argentina or Australia. Order by name of the country.
-- 练习 where in +子查询,从子查询里筛选字符串。
select name,continent
from world
where continent in
(select continent
from world
where name in ('Argentina','Australia'))
order by name
-- Which country has a population that is more than Canada but less than Poland? Show the name and the population.
-- 练习 where子查询 and 子查询,筛选数值。
select name,population
from world
where population>
(select population
from world
where name= 'Canada')
and population<
(select population
from world
where name= 'Poland')
-- Show the name and the population of each country in Europe. Show the population as a percentage of the population of Germany.
-- 练习 select + 子查询
select name
,concat(round((population/(select population
from world
where name='Germany'))*100,0),'%') as percentage
from world
where continent = 'Europe'
-- Which countries have a GDP greater than every country in Europe? [Give the name only.] (Some countries may have NULL gdp values)
-- 练习 where + all(子查询)
-- 写法1
select name
from world
where gdp >
all(select gdp
from world
where continent = 'Europe'
and gdp is not null)
-- 写法2
select name
from world
where gdp >
all(select gdp
from world
where continent = 'Europe'
and gdp > 0)
-- 写法3
select name
from world
where gdp >
(select max(gdp)
from world
where continent = 'Europe')
-- Find the largest country (by area) in each continent, show the continent, the name and the area:
-- 练习关联子查询
-- 写法1
select continent, name, area
from world x
where area >= all
(select area from world y
where y.continent = x.continent
and area >0)
-- 写法2
select continent, name, area
from world
where area in
(select max(area)
from world
group by continent)
-- List each continent and the name of the country that comes first alphabetically.
-- 练习关联子查询,字符串比较,按字母顺序排名取出第一个国家。
-- 写法1
select continent,name
from world x
where name <= all
(select name from world y
where y.continent= x.continent)
-- 写法2
select continent,name
from world
where name in
(select min(name)
from world
group by continent)
-- Find the continents where all countries have a population <= 25000000. Then find the names of the countries associated with these continents. Show name, continent and population.
-- 双重嵌套,先写一个嵌套,筛选出洲,再写一个嵌套,筛选该洲的国家,洲名和人口。
-- 写法1
select name,continent,population
from world
where continent =
(select continent
from world x
where population >= all (
select population
from world y
where y.continent = x.continent)
and population <= 25000000)
-- 写法2
select name,continent,population
from world x
where 25000000 >= all (
select population
from world y
where y.continent = x.continent
and y.population > 0)
-- Some countries have populations more than three times that of any of their neighbours (in the same continent). Give the countries and continents.
-- 如何表达3倍的人口和排除最大国家自身是关键
select name, continent
from world x
where population >= all(
select 3*population
from world y
where y.continent = x.continent
and y.name !=x.name)