解答Oracle LEFT JOIN和hive left outer joinN的区别

oracle的left join,right join和full join的一点介绍 - Oracle数据库栏目 - 红黑联盟
oracle的left join,right join和full join的一点介绍
oracle的left join,right join和full join的一点介绍
以下是摘自oracle ocp9i文档:
& & & outer join syntax:
& & & 1)you use an outer join to also see rows that do not meet the join condition
& & & 2)the outer join operator is the plus sign(+)
& & &outer join restrictions:
& & &1)the outer join operator can appear on only one side of the expression:the side that has information missing.it returns those rows from one table that have no direct match in the other table. & &
& & &2)a condition involving an outer join cannot use the IN operator or be linked to another condition by the OR operator.
& & 配置实验环境:
hr@ORCL& &
hr@ORCL& &
hr@ORCL& create table a(id number,name varchar2(10)); &
hr@ORCL& create table b(id number,name varchar2(10)); &
hr@ORCL& insert into a values(1,'a'); &
hr@ORCL& insert into a values(2,'b'); &
hr@ORCL& insert into a values(3,'c'); &
hr@ORCL& insert into b values(1,'a'); &
hr@ORCL& insert into b values(2,'b'); &
hr@ORCL& insert into b values(4,'d'); &
hr@ORCL& select * &
& & & & ID NAME &
---------- ---------- &
& & & & &1 a &
& & & & &2 b &
& & & & &3 c &
hr@ORCL& select * &
& & & & ID NAME &
---------- ---------- &
& & & & &1 a &
& & & & &2 b &
& & & & &4 d &
hr@ORCL& &
& & --全外连接的结果是:
& & & 1)选出所有满足条件的结果
& & & 2)以左表为准,将左表不满足条件的结果接在左边
& & & 3)以右表为准,把右表不满足条件的结果接在右边
& & & 4)将以上结果全部合起来 & &
hr@ORCL& select a.id,b.id from a full join b on a.id=b. &
& & & & ID & & & & ID &
---------- ---------- &
& & & & &1 & & & & &1 &
& & & & &2 & & & & &2 &
& & & & &3 &
& & & & & & & & & & 4 &
& & --left out join和oracle的加号在右结果是相同。同理,right out join和加号在左是一样的。(sql99的语法和oracle私有语法的比较)
hr@ORCL& select a.id,b.id from a,b where a.id=b.id(+); &
& & & & ID & & & & ID &
---------- ---------- &
& & & & &1 & & & & &1 &
& & & & &2 & & & & &2 &
& & & & &3 &
hr@ORCL& select a.id,b.id from a left outer join b on a.id=b. &
& & & & ID & & & & ID &
---------- ---------- &
& & & & &1 & & & & &1 &
& & & & &2 & & & & &2 &
& & & & &3 &
& & --结果类似于from a left join b on a.col=b.col and a.coln=....。单个列选择条件的列是基表(加号在谁身上谁是从表,没有加号的一方是基表)的用decode和+改写,不能用一般的改写,若不是基表的可以简单用+改写。比如:
SQL& SELECT a.ID,b.ID &
& 2 &FROM a FULL JOIN b &
& 3 &ON a.ID=b.ID AND a.NAME='a'; &
& & & & ID & & & & ID &
---------- ---------- &
& & & & &1 & & & & &1 &
& & & & &2 &&
& & & & &3 &&
& & & & &1 & & & & &1 &
& & & & & & & & & & 4 &
& & & & & & & & & & 2 &
改写之: &
SQL& SELECT a.ID,b.ID &
& 2 &FROM a,b WHERE a.id=decode(a.NAME,'a',b.ID(+)) &
& 3 &UNION ALL & & &
& 4 &SELECT a.ID,b.ID &
& 5 &FROM a,b WHERE a.ID(+)=b.ID AND a.NAME(+)='a' AND a.ID IS NULL; &
& & & & ID & & & & ID &
---------- ---------- &
& & & & &1 & & & & &1 &
& & & & &2 &&
& & & & &3 &&
& & & & &1 & & & & &1 &
& & & & & & & & & & 2 &
& & & & & & & & & & 4 &
& & 用union来实现上面例子的full join结果,需要考虑表的关系。
& & 1)如果是两表1:1
& & & & &加号在左,以右为准(相当于sql99的right join)
& & & & &加号在右,以左为准(相当于sql99的left join)
hr@ORCL& select a.id,b.id from a,b where a.id=b.id(+) &
& 2 &union &
& 3 & & &select a.id,b.id from a,b where a.id(+)=b. &
& & & & ID & & & & ID &
---------- ---------- &
& & & & &1 & & & & &1 &
& & & & &2 & & & & &2 &
& & & & &3 &
& & & & & & & & & & 4 &
& & 2)如果是两表1:n,用union剔重就不正确。
hr@ORCL& insert into a values(1,'a'); &
hr@ORCL& &
hr@ORCL& select * &
& & & & ID NAME &
---------- ---------- &
& & & & &1 a &
& & & & &2 b &
& & & & &3 c &
& & & & &1 a &
hr@ORCL& select * &
& & & & ID NAME &
---------- ---------- &
& & & & &1 a &
& & & & &2 b &
& & & & &4 d &
--1:n用UNION不正确 &
SQL& SELECT a.ID,b.ID &
& 2 &FROM a,b WHERE a.ID=b.ID(+) &
& 3 &UNION &
& 4 &SELECT a.ID,b.ID &
& 5 &FROM a,b WHERE a.ID(+)=b.ID; &
& & & & ID & & & & ID &
---------- ---------- &
& & & & &1 & & & & &1 &
& & & & &2 & & & & &2 &
& & & & &3 &&
& & & & & & & & & & 4 &
--正确解法有三。注意,在使用sql时,任何时候,任何地方,一定要考虑null!!!切记。 &
法一: & & &
SQL& SELECT a.ID,b.ID &
& 2 &FROM a,b WHERE a.ID=b.ID(+) &
& 3 &UNION ALL &
& 4 &SELECT a.ID,b.ID &
& 5 &FROM a,b WHERE a.ID(+)=b.ID AND a.ID IS NULL; &
& & & & ID & & & & ID &
---------- ---------- &
& & & & &1 & & & & &1 &
& & & & &1 & & & & &1 &
& & & & &2 & & & & &2 &
& & & & &3 &&
& & & & & & & & & & 4 &
SQL& SELECT a.ID,b.ID &
& 2 &FROM a,b WHERE a.ID=b.ID(+) AND b.ID IS NULL &
& 3 &UNION ALL &
& 4 &SELECT a.ID,b.ID &
& 5 &FROM a,b WHERE a.ID(+)=b.ID; &
& & & & ID & & & & ID &
---------- ---------- &
& & & & &3 &&
& & & & &1 & & & & &1 &
& & & & &1 & & & & &1 &
& & & & &2 & & & & &2 &
& & & & & & & & & & 4 &
SQL& SELECT a.ID,b.ID &
& 2 &FROM a FULL JOIN b &
& 3 &ON a.ID=b.ID; &
& & & & ID & & & & ID &
---------- ---------- &
& & & & &1 & & & & &1 &
& & & & &1 & & & & &1 &
& & & & &2 & & & & &2 &
& & & & &3 &&
& & & & & & & & & & 4 &
& & --逗号和full join是不一样的。另外,full join须加上关键字on,才是完整的语句。
hr@ORCL& select p.id,t.id from p,t where p.id=t. &
& & & & ID & & & & ID &
---------- ---------- &
& & & & &1 & & & & &1 &
& & & & &3 & & & & &3 &
hr@ORCL& select p.id,t.id from p full join t on p.id=t. &
& & & & ID & & & & ID &
---------- ---------- &
& & & & &1 & & & & &1 &
& & & & &3 & & & & &3 &
& & & & &2 &
& & & & & & & & & & 5 &
& & 全外连接和union连接都可以实现相同结果。我们来看一下他们的执行计划。
全外连接的执行计划: &
hr@ORCL& select a.id,b.id from a full join b on a.id=b. &
& & & & ID & & & & ID &
---------- ---------- &
& & & & &1 & & & & &1 &
& & & & &2 & & & & &2 &
& & & & &3 &
& & & & & & & & & & 4 &
Execution Plan &
---------------------------------------------------------- &
Plan hash value:
----------------------------------------------------------------------------- &
| Id &| Operation & & & & & &| Name | Rows &| Bytes | &u&&span style=&color:#ff0000;&&Cost (%CPU&/span&&/u&)| Time & & | &
----------------------------------------------------------------------------- &
| & 0 | SELECT STATEMENT & & | & & &| & & 4 | & 104 | & &13 & (8)| 00:00:01 | &
| & 1 | &VIEW & & & & & & & &| & & &| & & 4 | & 104 | & &13 & (8)| 00:00:01 | &
| & 2 | & UNION-ALL & & & & &| & & &| & & & | & & & | & & & & & &| & & & & &| &
|* &3 | & &HASH JOIN OUTER & | & & &| & & 3 | & 312 | & & 7 &(15)| 00:00:01 | &
| & 4 | & & TABLE ACCESS FULL| A & &| & & 3 | & 195 | & & 3 & (0)| 00:00:01 | &
| & 5 | & & TABLE ACCESS FULL| B & &| & & 3 | & 117 | & & 3 & (0)| 00:00:01 | &
|* &6 | & &HASH JOIN ANTI & &| & & &| & & 1 | & &26 | & & 7 &(15)| 00:00:01 | &
| & 7 | & & TABLE ACCESS FULL| B & &| & & 3 | & &39 | & & 3 & (0)| 00:00:01 | &
| & 8 | & & TABLE ACCESS FULL| A & &| & & 3 | & &39 | & & 3 & (0)| 00:00:01 | &
----------------------------------------------------------------------------- &
Predicate Information (identified by operation id): &
--------------------------------------------------- &
& &3 - access(&A&.&ID&=&B&.&ID&(+)) &
& &6 - access(&A&.&ID&=&B&.&ID&) &
& &- dynamic sampling used for this statement &
Statistics &
---------------------------------------------------------- &
& & & & & 0 &recursive calls &
& & & & & 0 &db block gets &
& & & & &29 &consistent gets &
& & & & & 0 &physical reads &
& & & & & 0 &redo size &
& & & & 520 &bytes sent via SQL*Net to client &
& & & & 385 &bytes received via SQL*Net from client &
& & & & & 2 &SQL*Net roundtrips to/from client &
& & & & & 0 &sorts (memory) &
& & & & & 0 &sorts (disk) &
& & & & & 4 &rows processed &
union的执行计划: &
hr@ORCL& select a.id,b.id from a,b where a.id=b.id(+) &
& 2 &union & & &
& 3 & & &select a.id,b.id from a,b where a.id(+)=b. &
& & & & ID & & & & ID &
---------- ---------- &
& & & & &1 & & & & &1 &
& & & & &2 & & & & &2 &
& & & & &3 &
& & & & & & & & & & 4 &
Execution Plan &
---------------------------------------------------------- &
Plan hash value:
----------------------------------------------------------------------------- &
| Id &| Operation & & & & & &| Name | Rows &| Bytes |&span style=&color:#ff0000;&& Cost (%CPU&/span&)| Time & & | &
----------------------------------------------------------------------------- &
| & 0 | SELECT STATEMENT & & | & & &| & & 6 | & 156 | & &15 &(60)| 00:00:01 | &
| & 1 | &SORT UNIQUE & & & & | & & &| & & 6 | & 156 | & &15 &(60)| 00:00:01 | &
| & 2 | & UNION-ALL & & & & &| & & &| & & & | & & & | & & & & & &| & & & & &| &
|* &3 | & &HASH JOIN OUTER & | & & &| & & 3 | & &78 | & & 7 &(15)| 00:00:01 | &
| & 4 | & & TABLE ACCESS FULL| A & &| & & 3 | & &39 | & & 3 & (0)| 00:00:01 | &
| & 5 | & & TABLE ACCESS FULL| B & &| & & 3 | & &39 | & & 3 & (0)| 00:00:01 | &
|* &6 | & &HASH JOIN OUTER & | & & &| & & 3 | & &78 | & & 7 &(15)| 00:00:01 | &
| & 7 | & & TABLE ACCESS FULL| B & &| & & 3 | & &39 | & & 3 & (0)| 00:00:01 | &
| & 8 | & & TABLE ACCESS FULL| A & &| & & 3 | & &39 | & & 3 & (0)| 00:00:01 | &
----------------------------------------------------------------------------- &
Predicate Information (identified by operation id): &
--------------------------------------------------- &
& &3 - access(&A&.&ID&=&B&.&ID&(+)) &
& &6 - access(&A&.&ID&(+)=&B&.&ID&) &
& &- dynamic sampling used for this statement &
Statistics & & &
---------------------------------------------------------- &
& & & & & 0 &recursive calls &
& & & & & 0 &db block gets &
& & & & &28 &consistent gets &
& & & & & 0 &physical reads &
& & & & & 0 &redo size &
& & & & 520 &bytes sent via SQL*Net to client &
& & & & 385 &bytes received via SQL*Net from client &
& & & & & 2 &SQL*Net roundtrips to/from client &
& & & & &&span style=&color:#ff0000;&& 1 &sorts (memory) &
&/span& & & & & &0 &sorts (disk) &
& & & & & 4 &rows processed &
& & 显然,union连接的cpu代价要比full join连接来得多。此外,union还会暗含一个排序操作。当数据量海量时,估计会对性能带来一定的影响。而且,在oracle的私有语法里,是没有全外连接的,只能通过union连接来模拟full join。所以,建议需要使用外连接时,请使用full join,不要用union模拟。
作者 linwaterbin请教一直困扰的问题,三张表,A Left outer joinB ……left outer join C……
[问题点数:70分,结帖人jinianjun]
请教一直困扰的问题,三张表,A Left outer joinB ……left outer join C……
[问题点数:70分,结帖人jinianjun]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2013年6月 Oracle大版内专家分月排行榜第二
2013年 总版技术专家分年内排行榜第二
2014年8月 总版技术专家分月排行榜第一2014年7月 总版技术专家分月排行榜第一2014年6月 总版技术专家分月排行榜第一2014年5月 总版技术专家分月排行榜第一2014年4月 总版技术专家分月排行榜第一2014年3月 总版技术专家分月排行榜第一2014年1月 总版技术专家分月排行榜第一2013年12月 总版技术专家分月排行榜第一
本帖子已过去太久远了,不再提供回复功能。Oracle答案-经典_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Oracle答案-经典
上传于||文档简介
&&O​r​a​c​l​e​答​案​-​经​典
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩9页未读,继续阅读
你可能喜欢oracle中left join和right join的区别浅谈
字体:[ ] 类型:转载 时间:
oracle中left join和right join的区别浅谈,需要的朋友可以参考一下
通俗的讲:&
&& A&& left&& join&&& B&&& 的连接的记录数与A表的记录数同&
&& A&& right&& join&&& B&&& 的连接的记录数与B表的记录数同&&&
&& A&& left&& join&&& B&&& 等价B&& right&& join&&& A
table&&& A:&
&& Field_K,&&& Field_A&
& 1&&&&&&&&&&&&&&&&&&&&&&& a&
& 3&&&&&&&&&&&&&&&&&&&&&&& b&
& 4&&&&&&&&&&&&&&&&&&&&&&& c&
& table&&& B:&
&& Field_K,&&& Field_B&
& 1&&&&&&&&&&&&&&&&&&&&&&& x&
& 2&&&&&&&&&&&&&&&&&&&&&&& y&
& 4&&&&&&&&&&&&&&&&&&&&&&& z&
& select&&& a.Field_K,&&& a.Field_A,&&& b.Field_K,&&& b.Field_B&
& from&&& a&& left&& join&&& b&& on&&& a.Field_K=b.Field_K&
&& Field_K&&&&&&&&& Field_A&&&&&&&&& Field_K&&&&&&&&& Field_B&&&&&&&&&
& ----------&&& ----------&&& ----------&&& ----------&&&
& 1&&&&&&&&&&&&&&&&&&&&& a&&&&&&&&&&&&&&&&&&&& 1&&&&&&&&&&&&&&&&&&&&& x&&&&&&&&&&&&&&&&&&&
& 3&&&&&&&&&&&&&&&&&&&&& b&&&&&&&&&&&&&&&&&&&& NULL&&&&&&&&&&&&&& NULL&
& 4&&&&&&&&&&&&&&&&&&&&& c&&&&&&&&&&&&&&&&&&&& 4&&&&&&&&&&&&&&&&&&&&& z&&&&&&&&&&&&&&&&&&&
& select&&& a.Field_K,&&& a.Field_A,&&& b.Field_K,&&& b.Field_B&
& from&&& a&& right&& join&&& b&& on&&& a.Field_K=b.Field_K&
&& Field_K&&&&&&&&& Field_A&&&&&&&&& Field_K&&&&&&&&& Field_B&&&&&&&&&
& ----------&&& ----------&&& ----------&&& ----------&&&
& 1&&&&&&&&&&&&&&&&&&&&& a&&&&&&&&&&&&&&&&&&&& 1&&&&&&&&&&&&&&&&&&&&& x&&&&&&&&&&&&&&&&&&&
& NULL&&&&&&&&&&&&&& NULL&&&&&&&&&&&&&& 2&&&&&&&&&&&&&&&&&&&&& y&&&&&&&&&&&&&&&&&&&
& 4&&&&&&&&&&&&&&&&&&&&& c&&&&&&&&&&&&&&&&&&&& 4&&&&&&&&&&&&&&&&&&&&& z&&&&& --
举个例子:&
&& 假设a表和b表的数据是这样的。&
&& a&&&&&&&&&&&&&&&&&&&&&&&&& b&&&
&& id&&&&& name  id&&&&& stock &
& 1  a&&&&&&&&&&&& 1&&&&&&&& 15&
& 2&&&&&&&&& b&&&&&&&&&&&& 2&&&&&&&& 50&
& 3&&&&&&&&& c&&&&&&&&&&&&&&&  &
& select&& *&& from&&& a&& inner&& join&&& b&& on&&& a.id=b.id&
&& 这个语法是连接查询中的内连接,它产生的结果是&
&& 两个表相匹配的记录出现在结果列表中。&
&& 根据上面的表,出现的结果是这样的&
&& a.id&&&&& name&&&&& b.id&&&&& stock&
& 1  &&&&& a&&&&&&&&&&&& 1&&&&&&&& 15&
& 2&&&&&&&&&&&&& b&&&&&&&&&&&& 2&&&&&&&& 50&
& ----------------------------&
& select&& *&& from&&& a,b&& where&&& a.id=b.id&
&& 这个语法是内连接的另外一种写法,其执行结果与inner&& join&&& 一样&
& --------------------------------&&&
& select&& *&& from&&& a&& left/right&& join&&& b&& on&&& a.id=b.id&
&& 这个是外连接语法中的左外连接或右外连接&
&& 如果是左外连接的话,它将显示a表的所有记录,&
& select&&& a.*,b.*&& from&&& a&& left&& join&&& b&& on&&& a.id=b.id&
&& 查询的结果是这样的:&
&& a.id&&&&& name&&&&& b.id&&&&& stock&
& 1  &&&&&&& a&&&&&&&& 1&&&&&&&&&&&& 15&
& 2&&&&&&&&&&&&&&& b&&&&&&&& 2&&&&&&&&&&&& 50&
& 3&&&&&&&&&&&&&&& c&&&&&& null&&&&&&&& null &
& --------------------------------------------&
&& 如果是右外连接的话,它将显示b表的所有记录,&
& select&&& a.*,b.*&& from&&& a&& right&& join&&& b&& on&&& a.id=b.id&
&& 查询的结果是这样的:&
&& a.id&&&&& name&&&&& b.id&&&&& stock&
& 1  &&&&&&& a&&&&&&&& 1&&&&&&&&&&&& 15&
& 2&&&&&&&&&&&&&&& b&&&&&&&& 2&&&&&&&&&&&& 50&&
select&&& a.*,b.*&& from&&& a&& left&& join&&& b&& on&&& a.k&& =&&& b.k&&&
& select&&& a.*,b.*&& from&&& a&& left&& outer&& join&&& b&& on&&& a.k&& =b.k&
& ----------上面两种一样left&&& join是left&&& outer&&& join的简写&
& select&&& a.*,b.*&& from&&& a&& left&& inner&& join&&& b&& on&&& a.k&& =&&& b.k&&&
&& 没有这种写法,错误的语句.
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具解答Oracle LEFT JOIN和LEFT OUTER JOIN的区别
日期:作者:
【TechTarget中国原创】 问:我一直在对不同种类的Oracle连接做研究,目前还搞不清楚LEFT JOIN和LEFT OUTER JOIN之间有什么区别。Outer这个词是可选的么?因为Oracle中的LEFT JOIN是默认为OUTER JOIN的。如果是这样的话,我就不明白“INNER”和“OUTER”的用法了,因为显而易见INNER与JOIN或FULL JOIN一起使用从而产生两个表中所有的匹配(对于inner也是同样如此,对么?)。而OUTER可以和LEFT,RIGHT以及FULL一起使用。这些关键词的使用难道只是用来强调JOIN的特性么?
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
TechTarget中国
查看更多评论
敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。
Oracle在Gartner公司商业智能分析平台“魔力象限”中连续上榜十年以后,在2016年并未上榜,Oracle公司失去了在魔力象限的位置可能会影响未来的选择。
2016年Oracle在数据和应用程序领域将会有怎样的发展?Oracle作为本地数据库领域的巨擘是如何将自己定位为一个云领域新兴竞争者的?
现在,越来越多的企业考虑把应用系统迁移到云环境,在云服务方面投资寻求省钱新办法已经成为了优先考虑的方案。
Oracle关键补丁更新程序已经持续了11年,每年发布四次补丁。安全补丁覆盖24个不同的产品线,包括但不限于Oracle数据库。
自SQL Server 2000发布以来,处理XML数据就成为了数据库管理员们经常讨论的一个话题。而且随着Web应用的进一步加深,XML在传统数据库管理系统中的应用也越来越广泛。
SQL&Server自带一系列强大的管理工具集,但是这并不是说SQL&Server已经完全具备了开箱即用的能力,你还是需要一些特定的第三方工具来确保SQL&Server的可靠性、安全性和可管理性。
在本次的TechTarget数据库技术手册中,我们将为您带来一些有关数据仓库的最佳实践,其中包括数据仓库的评估、数据仓库管理技巧、数据仓库实施案例等内容,希望能对DBA的工作带来一定的帮助。
高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。
TechTarget
企业级IT网站群
TechTarget中国 版权所有
All Rights Reserved, Copyright
TechTarget中国 版权所有
All Rights Reserved, Copyright
【TechTarget中国原创】 问:我一直在对不同种类的Oracle连接做研究,目前还搞不清楚LEFT JOIN和LEFT OUTER JOIN之间有什么区别。Outer这个词是可选的么?因为Oracle中的LEFT JOIN是默认为OUTER JOIN的。如果是这样的话,我就不明白“INNER”和“OUTER”的用法了,因为显而易见INNER与JOIN或FULL JOIN一起使用从而产生两个表中所有的匹配(对于inner也是同样如此,对么?)。而OUTER可以和LEFT,RIGHT以及FULL一起使用。这些关键词的使用难道只是用来强调JOIN的特性么? 答:Oracle连接,包括LEFT JONI和LEFT OUTERJOIN,的确是会让人非常困惑的话题,对Oracle新手来说尤为如此。在这里我们来深入介绍一些关于Oracle连接的常见问题。 根据TechTarget的专家问答,Oracle中有三类OUTER JOIN -- 分别是LEFT,RIGHT和FULL。一个LEFT OUTER JOIN包含“左”表中的所有记录,即使它与在此连接中指定的“右”表并不存在任何匹配。一个RIGHT OUTER JOIN包含“右”表中的所有记录,即使它与在此连接中指定的“左”表并不存在任何匹配。而一个FULL OUTER JOIN则包含左右两表中的所有记录。 就像之前专家Karen Morton所说的一样,一个OUTER JOIN通过返回满足连接条件的记录,以及从一个没有记录满足其他连接条件的表返回某些或所有记录来扩展一个简单连接的结果。 社区用户cpflames解释说,关键词OUTER是可选的,但其实它应该是强制性的。他建议在Oracle中的OUTER JOINS要始终包含OUTER来提醒这是一个外连接。 对于JOIN来说,LEFT,RIGHT和FULL这几个关键词是强制性的。而LEFT,RIGHT和FULL OUTER JOINS是OUTER JOIN仅有的类型。 据cpflames解释,INNER JOIN意味着所有的结果记录是通过匹配两个表之间的某些条件产生的。一个OUTER JOIN会有某些时候并不匹配的结果记录,而是从一个表或是另外一个表亦或是从它们两个表返回没有匹配的结果记录。除了inner和outer还有另外一个连接类型,那就是CROSS JOIN。

我要回帖

更多关于 sql left outer join 的文章

 

随机推荐