首页 > 数据库技术 > 详细

oracle中 常用的 join on 相关和 集合运算的总结

时间:2017-09-18 18:46:55      阅读:269      评论:0      收藏:0      [点我收藏+]

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 相关和 集合运算的总结

原文:http://www.cnblogs.com/mobeisanghai/p/7544544.html

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