oracle中 常用的 join on 相关和 集合运算的总结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle中 常用的 join on 相关和 集合运算的总结相关的知识,希望对你有一定的参考价值。
sql常用联合查询的 join on 、 left join(左连接) 、 right join (右连接)、inner join (等值连接)以及常用的集合运算有:union、unionall、minus、intersect的效果和总结
首先接着用上一篇的book表和pbook表:
首先把join on和inner join 放在一起:
select * from book a join ( select id,name,price from pbook) b on a.id=b.id; select * from book a inner join ( select id,name,price from pbook) b on a.id=b.id;
相比较这结果一模一样,只返回两个表中联结字段id相等的行
接着我们看左、右连接比较:
select * from book a left join ( select id,name,price from pbook) b on a.id=b.id; select * from book a right join ( select id,name,price from pbook) b on a.id=b.id;
明显能看出,左连接以左表为主,左表全部显示,右表只显示关联的,其余为空,总行数是左表的行。右连接是以右表为主,显示右边所有行,左表关联的行显示,其余为空
下面 常用的集合运算的比较:
首先我们比较一下union 和union all 结果比较
select * from book union select id,name,price from pbook; select * from book union all select id,name,price from pbook;
这里能够看出:union 和union all 把相同列合并了,union对合并的数据去掉了重复行并且进行了排序。而union all 则是把2个表合起来,没有排序或者去重。
提示:1.表面上看union对数据进行排序,但是不能保证排序一定正确。(在oralce10之前是排序去重,之后是Hash UNIQUE运算去重,而它只比较散列值不进行排序)
2.当数据量很大时,速率上来讲,union all 会比union 快很多。
下一组比较:minus,intersect
select * from book minus select id,name,price from pbook; select * from book intersect (select id,name,price from pbook)
很明显:minus是把2个表冲突数据提出来,而intersect是把2个表的相同数据提出来
以上是关于oracle中 常用的 join on 相关和 集合运算的总结的主要内容,如果未能解决你的问题,请参考以下文章
深入Oracle的left join中on和where的区别详解