首页 > 数据库技术 > 详细

数据库练习2

时间:2019-10-22 18:40:31      阅读:132      评论:0      收藏:0      [点我收藏+]

1、子查询的用法(也可实现分组求最大值)

1)在每一个州中找出最大面积的国家,列出洲份 continent, 国家名字 name 及面积 area。 (有些国家的记录中,AREA是NULL,没有填入资料的。)

数据库world表:

namecontinentareapopulationgdpcapitaltldflag
Afghanistan Asia 652230 25500100 20364000000 Kabul .af //upload.wikimedia.org/wikipedia/commons/9/9a/Flag_of_Afghanistan.svg
Albania Europe 28748 2821977 12044000000 Tirana .al //upload.wikimedia.org/wikipedia/commons/3/36/Flag_of_Albania.svg
Algeria Africa 2381741 38700000 207021000000 Algiers .dz //upload.wikimedia.org/wikipedia/commons/7/77/Flag_of_Algeria.svg
Andorra Europe 468 76098 3222000000 Andorra la Vella .ad //upload.wikimedia.org/wikipedia/commons/1/19/Flag_of_Andorra.svg

            ...

分析area中含有null值,若不含null值,sql中可采用row_number() over(partition by ) 分组排序实现.

代码:

select a.name, a.continent , a,area from 
(select name ,continent ,area ,
row_number() over(partition by continent order by area desc) rank
from world ) a 
where a.rank =1

 area 中含有null值,采用子查询的方式:(2个表比较实现查询结果:比较条件区域相同,比较a的面积大于b的面积,区域下的所有其他项,引入all函数).

select continent ,name, area from world a 
where a.area >=
all(select area from world b where a.continent = b.continent and b.area >0)

 

2)找出洲份,当中全部国家都有少于或等于 25000000 人口. 在这些洲份中,列出国家名字name,continent 洲份和population人口。

select name, continent ,population from world   a
where 25000000 >  all(
select b.population from world b 
where a.continent  = b.continent and b.population >0
) 

 

3) 有些国家的人口是同洲份的所有其他国的3倍或以上。列出 国家名字name 和 洲份 continent。

select name,continent from world a 
where a.population/3 >= all(
select b.population  from world b 
where a.continent = b.continent and b.population >0 and a.name <> b.name 
)

  

数据库练习2

原文:https://www.cnblogs.com/hqczsh/p/11721465.html

(1)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!