Oracle 内连接(inner join)、外连接(outer join)、全连接(full join)

之前没有用过 full outer join,第一次用,学习一下

Student表

Color表

Oracle中的连接可分为,内连接(inner join)、外连接(outer join)、全连接(full join),不光是Oracle,其他很多的数据库也都有这3种连接查询方式:

内连接inner join/join

也叫自连接,这是我们经常用到的查询方式,内连接查询只能查询出匹配的记录,匹配不上的记录时无法查询出来的 ,以下三种查询结果一样

select * from student s, color c where s.stuname = c.stuname;

select * from student s inner join color c on s.stuname = c.stuname;

select * from student s join color c on s.stuname = c.stuname;

外连接outer join

可进一步分为左外连接left outer join和右外连接right outer join,(简称左连接left join,右连接 right join)。

左外连接

左连接就是以左边的表(left join 左边的表)为主表,即使有些记录关联不上,主表的信息也能全部查询出来,也就是左边的表数据全部展示,右边表的数据复合条件的展示,不符合条件的以空值代替,适合那种需要求出维度(比如求出所有人员)的需求:

select * from student s left join color c on s.stuname = c.stuname;

等同于select * from student s left outer join color c on s.stuname = c.stuname;

右外连接

如果有需求要求在结果中展现所有的颜色信息,就可以用右连接:

还有另一种写法,可以达到相同的外连接效果:比如左外连接等同于以下的语句:

select * from student s ,color c where s.stuname = c.stuname(+);

同样右连接是这样的:

select * from student s ,color c where s.stuname(+) = c.stuname;

在(+)计算时,哪个带(+)哪个需要条件符合的,另一个全部的。即放左即右连接,放右即左连接。

全连接full join/full outer join

语法是语法为full join … on …,全连接的查询结果是左外连接和右外连接查询结果的并集,即使一些记录关联不上,也能够把部分信息查询出来:

产生M+N的结果集,列出两表全部的,不符合条件的,以空值代替。

select * from student s full join color c on s.stuname = c.stuname;

select * from student s full join color c on 1=1

笛卡尔乘积cross join

即不加任何条件,达到 M*N 的结果集。

以下两种查询结果一样。

select * from student s cross join color c

select * from student s , color c

注意:如果cross join加上where on s.stuname = c.stuname条件,会产生跟自连接一样的结果(cross join 后加上 on 报错):

加上条件,产生跟自连接一样的结果。

select * from student s cross join color c where s.stuname = c.stuname;

自连接结果集的cross join连接结果

总结

ü   所有的join连接,都可以加上类似where a.id=’1000’的条件,达到同样的效果。因为on不能做这种判断,只能是

ü   除了cross join不可以加on外,其它join连接都必须加上on关键字,后都可加where条件。

ü   虽然都可以加where条件,但是他们只在标准连接的结果集上查找where条件。比如左外连接的结果没有class的三班,所以如果加 where class.id=’C003’虽然在表中有,但在左连接结果集中没有,所以查询后,是没有记录的。

A表有100条数据,B表有80条数据,left join on 1=1,where 1=1的结果是:

应该是笛卡尔积

A表有100条数据,B表有80条数据,left join on 1=2,where 1=1的结果是:

应该是A表的值

测试:

select * from student s left join color c on 1=1 where 1=1

select * from student s left join color c on 1=2 where 1=1

SQL中Group By的使用

1、概述

“Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。

2、原始表

3、简单Group By

示例1

select 类别, sum(数量) as 数量之和
from A
group by 类别

返回结果如下表,实际上就是分类汇总。

4、Group By 和 Order By

示例2

select 类别, sum(数量) AS 数量之和
from A
group by 类别
order by sum(数量) desc

返回结果如下表

在Access中不可以使用“order by 数量之和 desc”,但在SQL Server中则可以。

5、Group By中Select指定的字段限制

示例3

select 类别, sum(数量) as 数量之和, 摘要
from A
group by 类别
order by 类别 desc

示例3执行后会提示下错误,如下图。这就是需要注意的一点,在select指定的字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。

6、Group By All

示例4

select 类别, 摘要, sum(数量) as 数量之和
from A
group by all 类别, 摘要

示例4中则可以指定“摘要”字段,其原因在于“多列分组”中包含了“摘要字段”,其执行结果如下表

“多列分组”实际上就是就是按照多列(类别+摘要)合并后的值进行分组,示例4中可以看到“a, a2001, 13”为“a, a2001, 11”和“a, a2001, 2”两条记录的合并。

SQL Server中虽然支持“group by all”,但Microsoft SQL Server 的未来版本中将删除 GROUP BY ALL,避免在新的开发工作中使用 GROUP BY ALL。Access中是不支持“Group By All”的,但Access中同样支持多列分组,上述SQL Server中的SQL在Access可以写成

select 类别, 摘要, sum(数量) AS 数量之和
from A
group by 类别, 摘要

7、Group By与聚合函数

在示例3中提到group by语句中select指定的字段必须是“分组依据字段”,其他字段若想出现在select中则必须包含在聚合函数中,常见的聚合函数如下表:

函数作用支持性
sum(列名)求和    
max(列名)最大值    
min(列名)最小值    
avg(列名)平均值    
first(列名)第一条记录仅Access支持
last(列名)最后一条记录仅Access支持
count(列名)统计记录数注意和count(*)的区别

示例5:求各组平均值

select 类别, avg(数量) AS 平均值 from A group by 类别;

示例6:求各组记录数目

select 类别, count(*) AS 记录数 from A group by 类别;

示例7:求各组记录数目

8、Having与Where的区别

  • where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚组函数,使用where条件过滤出特定的行。
  • having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组。

示例8

select 类别, sum(数量) as 数量之和 from A
group by 类别
having sum(数量) > 18

示例9:Having和Where的联合使用方法

select 类别, SUM(数量)from A
where 数量 gt;8
group by 类别
having SUM(数量) gt; 10

9、Compute 和 Compute By

select * from A where 数量 > 8

执行结果:

示例10:Compute

select *
from A
where 数量>8
compute max(数量),min(数量),avg(数量)

执行结果如下:

compute子句能够观察“查询结果”的数据细节或统计各列数据(如例10中max、min和avg),返回结果由select列表和compute统计结果组成。

示例11:Compute By

select *
from A
where 数量>8
order by 类别
compute max(数量),min(数量),avg(数量) by 类别

执行结果如下:

示例11与示例10相比多了“order by 类别”和“… by 类别”,示例10的执行结果实际是按照分组(a、b、c)进行了显示,每组都是由改组数据列表和改组数统计结果组成,另外:

  • compute子句必须与order by子句用一起使用
  • compute…by与group by相比,group by 只能得到各组数据的统计结果,而不能看到各组数据

在实际开发中compute与compute by的作用并不是很大,SQL Server支持compute和compute by,而Access并不支持

少年维特的烦恼》目录

   上篇

   下篇

2017年胡润全球富豪榜

2017年胡润全球富豪榜北京时间2017年3月7日,胡润研究院发布《2017胡润全球富豪榜》(Hurun Global Rich List 2017)。上榜富豪的财富计算截止日期为2017年1月15日。这是胡润研究院连续第六年发布“全球富豪榜”。《2017胡润全球富豪榜》,共计来自68个国家,1811家企业的2257位十亿美金富豪上榜,达历史最高。 上榜富豪的总财富比去年上升16%,达到55.9万亿元,相当于全球GDP的10.7%,与五年前的全球GDP相比上升2.3%。

                   年份                             2019                             2018                             2017                             2016                             2015                  

排名财富 (美元)姓名年龄关联企业主营行业
1810 亿比尔·盖茨63微软投资
2780 亿沃伦·巴菲特88伯克希尔·哈撒韦投资
3720 亿杰夫·贝佐斯55亚马逊在线零售
4690 亿阿曼西奥·奥特加82蒂则诺单一品牌零售
5580 亿马克·扎克伯格34Facebook科技
6480 亿拉里·埃里森74甲骨文科技
7460 亿卡洛斯·斯利姆·埃卢家庭78墨西哥美洲电信公司投资
8430 亿查尔斯·科赫83科氏工业能源
8430 亿大卫·科赫78科氏工业能源
10420 亿迈克尔·布隆伯格76彭博传媒
11380 亿伯纳德·阿诺特69酩悦·轩尼诗-路易·威登单一品牌零售
12370 亿拉里·佩奇45谷歌科技
12370 亿利利亚纳·贝当古96欧莱雅化妆品
14360 亿谢尔盖·布林45谷歌科技
15340 亿英瓦尔·坎普拉德家族92宜家单一品牌零售
16310 亿爱丽丝·沃尔顿69沃尔玛多品牌零售
16310 亿吉姆·沃尔顿70沃尔玛多品牌零售
16310 亿罗伯森·沃尔顿72沃尔玛多品牌零售
19300 亿王健林家族65万达房地产、文化
20290 亿贝特朗·皮埃奇家族82爱马仕单一品牌零售
20290 亿马云家族55阿里巴巴、蚂蚁金服电子商务、金融服务
20290 亿菲尔·奈特74耐克鞋类零售
23280 亿杰奎琳·马尔斯79玛氏公司食品饮料
23280 亿约翰·马尔斯83玛氏公司食品饮料
25270 亿迪特尔·施瓦茨79施瓦茨集团多品牌零售
25270 亿乔治·索罗斯88索罗斯基金管理公司对冲基金
25270 亿史蒂夫·鲍尔默62微软科技
25270 亿王卫48顺丰快递
29260 亿豪尔赫·保罗·雷曼79百威英博食品饮料
29260 亿卡尔.阿尔巴切特家族70阿尔迪多品牌零售
29260 亿穆克什·安巴尼61瑞来斯石油天然气
32250 亿李嘉诚91长江实业房地产、能源、投资
32250 亿孙正义61软银通信
34240 亿詹姆斯·欧文、亚瑟·欧文89欧文家族集团能源
34240 亿李兆基91恒基兆业房地产、投资
34240 亿谢尔登·阿德尔森85拉斯维加斯金沙集团博彩业
37230 亿穆里耶兹87欧尚多品牌零售
38220 亿玛丽亚·弗兰卡·菲索罗77费列罗食品饮料
38220 亿马化腾48腾讯IT、娱乐
40210 亿保罗·艾伦66伏尔坎资本投资
41200 亿卡尔·伊坎82伊坎企业投资
41200 亿斯蒂芬·佩尔森71H&M单一品牌零售
41200 亿苏珊娜·克拉腾56宝马汽车
44190 亿大卫·汤姆森家族61汤森路透传媒
44190 亿盖伦·韦斯顿家族78乔治威斯顿食品饮料
44190 亿莱恩·布拉瓦特尼克61利安德巴塞尔能源
47180 亿丁磊48网易IT、娱乐
47180 亿唐纳德·布伦86欧文公司房地产
47180 亿伊莲·马歇尔家族73科氏工业投资
47180 亿莱昂纳多·戴尔·维吉奥83陆逊梯卡奢侈品

显示第 1 到第 50 条记录,总共 2257 条记录

历年首富

年份姓名年龄行业财富(亿元)
1999荣毅仁83综合80
2000荣毅仁84综合150
2001刘永行刘永好兄弟53, 50农业83
2002荣智健60综合70
2003丁磊32互联网76
2004黄光裕36零售、房地产105
2005黄光裕37零售、房地产140
2006张茵49造纸270
2007杨惠妍25房地产1300
2008黄光裕39零售、房地产430
2009王传福43汽车、手机、充电电池350
2010宗庆后65消费品800
2011梁稳根55重型机械700
2012宗庆后67娃哈哈800
2013王健林59万达集团1350
2014年马云50阿里巴巴集团1500
2015年王健林家族61房地产、文化2200
2016年王健林家族62房地产、文化2150
2017年许家印60房地产、投资2900
2018年马云54马云家族2700

[1][3]

历年榜单

2018年

2018年胡润百富榜前十 [1]

排名财富 (人民币)姓名年龄关联企业主营行业
12700 亿马云家族54阿里系电子商务、金融科技
22500 亿许家印60恒大房地产、投资
32400 亿马化腾47腾讯互联网服务
41500 亿杨惠妍37碧桂园房地产
51400 亿王健林家族64万达房地产、文化
61300 亿何享健、何剑锋父子76、51美的家电制造
71200 亿王卫48顺丰快递
71200 亿严昊家族32太平洋建设基础建设
91150 亿李彦宏、马东敏夫妇50、48百度搜索引擎
101100 亿雷军49小米智能硬件、投资
101100 亿王文银家族50正威有色金属

2017年

2017年10月12日,胡润研究院发布《36计·胡润百富榜2017》,上榜门槛已连续五年保持20亿元。上榜富豪财富计算的截止日期为今年的8月15日。 [4]以下是榜单前十名明细 [4]

排名2017年36计·胡润百富榜财富 (人民币)姓名年龄关联企业主营行业
12900 亿许家印60中国恒大房地产、投资
22500 亿马化腾47腾讯IT、娱乐
32000 亿马云家族54阿里系电子商务 、互联网金融
41600 亿杨惠妍37碧桂园房地产
51550 亿王健林家族64万达房地产、文化
61500 亿王卫48顺丰快递
71250 亿李彦宏、马东敏夫妇50、48百度搜索引擎
81150 亿何享健、何剑锋父子76、51美的家电制造
81150 亿严昊家族32苏太华系基础建设
101100 亿丁磊47网易IT、娱乐
101100 亿李书福、李星星父子55、33吉利汽车制造

2016年

2016年10月13日,2016胡润百富榜发布,62岁的王健林及其家族以2150亿财富第三次成为中国首富。52岁的马云及其家族财富增长41%到2050亿,保持第二。45岁的马化腾虽然已经捐了139个亿,但财富仍然增长了38%到1650亿,上升1位到第三。这是胡润研究院自1999年以来连续第18年发布“胡润百富榜”,上榜门槛已连续四年保持20亿元。上榜富豪上市公司财富计算的截止日期为2016年年的8月15日。 [5]以下是榜单前十名明细 [5]

排名财富 (人民币)姓名年龄关联企业主营行业
12150 亿王健林家族64万达房地产、 文化
22050 亿马云家族54阿里巴巴、蚂蚁金服电子商务 、 金融服务
31650 亿马化腾47腾讯IT、 娱乐
41150 亿姚振华47宝能投资、 房地产
51120 亿宗庆后家族73娃哈哈饮料
61000 亿严昊家族32苏太华系基础建设
61000 亿丁磊47网易IT、 娱乐
8980 亿李彦宏、马东敏夫妇50、48百度搜索引擎
9850 亿卢志强家族66泛海房地产、 金融、 投资
10780 亿张近东55苏宁零售、 房地产
10780 亿严彬64华彬饮料、 地产、 投资
10780 亿许家印60恒大房地产、 投资
10780 亿何享健、何剑锋父子76、51美的家电制造

2015年

2015年有1877位企业家财富达到20亿元及以上,比去年又增加606人,上榜人数达历年之最。平均财富比去年上涨14%,达到73亿元。前1000名的上榜门槛从去年的24亿提高到39亿。1611位企业家财富增长,其中200位财富翻倍。有680位新人,是去年的2倍。以下是榜单前十名明细 [6]

排名财富 (人民币)姓名年龄关联企业主营行业
12200 亿王健林家族64万达房地产、文化
21450 亿马云家族54阿里巴巴、蚂蚁金服电子商务 、金融服务
31350 亿宗庆后家族73娃哈哈饮料
41200 亿马化腾47腾讯IT、娱乐
5920 亿雷军49小米手机、投资
6910 亿严昊家族32苏太华系基础建设
7850 亿李彦宏、马东敏夫妇50、48百度搜索引擎
8830 亿卢志强家族66泛海房地产、金融、投资
9810 亿张近东55苏宁云商零售、房地产
10650 亿鲁冠球家族72万向汽车制造业、房地产、农业
10650 亿严彬64华彬饮料、地产、投资