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的区别

深入Oracle的left join中on和where的区别详解

Oracle的left join中on和where的区别

Oracle left join 或right join

深入Oracle的left join中on和where的区别详解

Oracle 当两个表关联时,用where条件关联快还是用join on关联快,还有其他啥区别