sqlzoo第四关select in select

第四关 select in select
  • 世界各国信息数据库表
name(国家名)continent(州份)area(面积)population(人口)dgp(国民生产总值)
AfghanistanAsia6522302550010020343000000
AlbaniaEurope28748283174112960000000
AlgeriaAfrica238174137100000188681000000
4.1 题目及答案
  1. 列出每个国家的名字name,当中人口population是高于俄罗斯‘Russia’的人口。
SELECT name FROM world
  WHERE population >
     (SELECT population FROM world
      WHERE name='Russia')
  1. 列出欧洲每个国家的人均GDP,当中人均GDP要高于英国“United Kingdom”的数值。
select name from world 
	where continent = 'europe' and gdp/population 
		>(select gdp/population from world 
		where name = 'United Kingdom')
  1. 在阿根廷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
  1. 哪一個國家的人口比加拿大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') 
  1. 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'
  1. 哪些國家的GDP比Europe歐洲的全部國家都要高呢? [只需列出 name 。] (有些國家的記錄中,GDP是NULL,沒有填入資料的。)
select name 
	from world where gdp > all
	(select gdp from world where continent = 'Europe'and gdp > 0 )
  1. 在每一個州中找出最大面積的國家,列出洲份 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)

理解:先找出每个州份所有国家的面积,再从中取出最大值

  1. 列出洲份名稱,和每個洲份中國家名字按子母順序是排首位的國家名。(即每洲只有列一國)
  • 解题一:
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)

理解:先找出所有州的国家名称,并按名称排序后,取得第一个。

  • 困难的题目
  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比较

  1. 有些國家的人口是同洲份的所有其他國的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总结
函数用法说明
allALL运算符用于将值与另一个值集中的所有值进行比较
limit用于取出表中前n个数据或者是n后面y条数据 (包含n)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值