使用like时sql left outer joinn和inner join的区别

2008年11月 MS-SQL Server大版内专家分月排行榜第三2008年10月 MS-SQL Server大版内专家分月排行榜第三2006年7月 MS-SQL Server大版内专家分月排行榜第三
2016年10月优秀大版主2016年8月论坛优秀版主2015年4月优秀版主2014年11月论坛优秀版主
2016年4月 荣获微软MVP称号2015年4月 荣获微软MVP称号2014年4月 荣获微软MVP称号2013年4月 荣获微软MVP称号2009年1月 荣获微软MVP称号2012年4月 荣获微软MVP称号2011年4月 荣获微软MVP称号2010年4月 荣获微软MVP称号
2016年10月优秀大版主2016年8月论坛优秀版主2015年4月优秀版主2014年11月论坛优秀版主
2016年4月 荣获微软MVP称号2015年4月 荣获微软MVP称号2014年4月 荣获微软MVP称号2013年4月 荣获微软MVP称号2009年1月 荣获微软MVP称号2012年4月 荣获微软MVP称号2011年4月 荣获微软MVP称号2010年4月 荣获微软MVP称号
2016年10月优秀大版主2016年8月论坛优秀版主2015年4月优秀版主2014年11月论坛优秀版主
2016年4月 荣获微软MVP称号2015年4月 荣获微软MVP称号2014年4月 荣获微软MVP称号2013年4月 荣获微软MVP称号2009年1月 荣获微软MVP称号2012年4月 荣获微软MVP称号2011年4月 荣获微软MVP称号2010年4月 荣获微软MVP称号
2016年10月优秀大版主2016年8月论坛优秀版主2015年4月优秀版主2014年11月论坛优秀版主
2016年4月 荣获微软MVP称号2015年4月 荣获微软MVP称号2014年4月 荣获微软MVP称号2013年4月 荣获微软MVP称号2009年1月 荣获微软MVP称号2012年4月 荣获微软MVP称号2011年4月 荣获微软MVP称号2010年4月 荣获微软MVP称号
本帖子已过去太久远了,不再提供回复功能。下面通过一个ABAP程序,具体说明一下INNER JOIN,LEFT OUTER JOIN,RIGHT OUTER JOIN差异。
有两个数据库表,表中记录如下:
Inner join结果:
Left outer join结果如下:
right outer join结果如下:
完整代码如下:
REPORT ZTEST_JOIN.
CLASS demo DEFINITION.
PUBLIC SECTION.
CLASS-METHODS: class_constructor,
PRIVATE SECTION.
TYPES: wa1 TYPE demo_join1,
wa2 TYPE demo_join2.
TYPES BEGIN OF wa.
INCLUDE TYPE wa1 AS wa1 RENAMING WITH SUFFIX 1.
INCLUDE TYPE wa2 AS wa2 RENAMING WITH SUFFIX 2.
TYPES END OF wa.
CLASS-DATA out TYPE REF TO if_demo_output.
CLASS demo IMPLEMENTATION.
METHOD main.
DATA itab TYPE TABLE OF wa.
out-&begin_section( `Inner Joins`
)-&begin_section( `demo1 INNER JOIN demo2` ).
SELECT t1~a AS a1, t1~b AS b1, t1~c AS c1, t1~d AS d1,
t2~d AS d2, t2~e AS e2, t2~f AS f2, t2~g AS g2, t2~h AS h2
FROM demo_join1 AS t1
INNER JOIN demo_join2 AS t2 ON t2~d = t1~d
ORDER BY t1~d
INTO CORRESPONDING FIELDS OF TABLE @itab.
out-&write( itab
)-&next_section( `demo2 INNER JOIN demo1` ).
SELECT t1~a AS a1, t1~b AS b1, t1~c AS c1, t1~d AS d1,
t2~d AS d2, t2~e AS e2, t2~f AS f2, t2~g AS g2, t2~h AS h2
FROM demo_join2 AS t2
INNER JOIN demo_join1 AS t1 ON t1~d = t2~d
ORDER BY t1~d
INTO CORRESPONDING FIELDS OF TABLE @itab.
out-&write( itab
)-&end_section(
)-&next_section( `Outer Joins`
)-&begin_section( `demo1 LEFT OUTER JOIN demo2` ).
SELECT t1~a AS a1, t1~b AS b1, t1~c AS c1, t1~d AS d1,
t2~d AS d2, t2~e AS e2, t2~f AS f2, t2~g AS g2, t2~h AS h2
FROM demo_join1 AS t1
LEFT OUTER JOIN demo_join2 AS t2 ON t2~d = t1~d
ORDER BY t1~d
INTO CORRESPONDING FIELDS OF TABLE @itab.
out-&write( itab
)-&next_section( `demo2 LEFT OUTER JOIN demo1` ).
SELECT t1~a AS a1, t1~b AS b1, t1~c AS c1, t1~d AS d1,
t2~d AS d2, t2~e AS e2, t2~f AS f2, t2~g AS g2, t2~h AS h2
FROM demo_join2 AS t2
LEFT OUTER JOIN demo_join1 AS t1 ON t1~d = t2~d
ORDER BY t1~d
INTO CORRESPONDING FIELDS OF TABLE @itab.
out-&write( itab
)-&end_section(
)-&begin_section( `demo1 RIGHT OUTER JOIN demo2` ).
SELECT t1~a AS a1, t1~b AS b1, t1~c AS c1, t1~d AS d1,
t2~d AS d2, t2~e AS e2, t2~f AS f2, t2~g AS g2, t2~h AS h2
FROM demo_join1 AS t1
RIGHT OUTER JOIN demo_join2 AS t2 ON t2~d = t1~d
ORDER BY t1~d
INTO CORRESPONDING FIELDS OF TABLE @itab.
out-&write( itab
)-&next_section( `demo2 RIGHT OUTER JOIN demo1` ).
SELECT t1~a AS a1, t1~b AS b1, t1~c AS c1, t1~d AS d1,
t2~d AS d2, t2~e AS e2, t2~f AS f2, t2~g AS g2, t2~h AS h2
FROM demo_join2 AS t2
RIGHT OUTER JOIN demo_join1 AS t1 ON t1~d = t2~d
ORDER BY t1~d
INTO CORRESPONDING FIELDS OF TABLE @itab.
out-&display( itab ).
ENDMETHOD.
METHOD class_constructor.
DATA: itab1 TYPE TABLE OF wa1 WITH EMPTY KEY,
itab2 TYPE TABLE OF wa2 WITH EMPTY KEY.
out = cl_demo_output=&new( )-&begin_section( `Database Tables` ).
itab1 = VALUE #( ( a = 'a1' b = 'b1' c = 'c1'
d = 'uu' )
( a = 'a2' b = 'b2' c = 'c2'
d = 'uu' )
( a = 'a3' b = 'b3' c = 'c3'
d = 'vv' )
( a = 'a4' b = 'b4' c = 'c4'
d = 'ww' )
itab2 = VALUE #( ( d = 'uu' e = 'e1' f = 'f1'
h = 'h1' )
( d = 'ww' e = 'e2' f = 'f2'
h = 'h2' )
( d = 'xx' e = 'e3' f = 'f3'
h = 'h3' )
DELETE FROM demo_join1.
INSERT demo_join1 FROM TABLE @itab1.
DELETE FROM demo_join2.
INSERT demo_join2 FROM TABLE @itab2.
out-&begin_section( `demo1`
)-&write( itab1
)-&next_section( `demo2`
)-&write( itab2
)-&end_section(
)-&end_section( ).
ENDMETHOD.
START-OF-SELECTION.
demo=&main( ).
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
REPORT ZTEST_JOIN.&CLASS demo DEFINITION.&&PUBLIC SECTION.&&&&CLASS-METHODS: class_constructor,&&&&&&&&&&&&&&&&&& main.&&PRIVATE SECTION.&&&&TYPES: wa1 TYPE demo_join1,&&&&&&&&&& wa2 TYPE demo_join2.&&&&TYPES BEGIN OF wa.&&&&&&&&&&&&INCLUDE TYPE wa1 AS wa1 RENAMING WITH SUFFIX 1.&&&&&&&&&&&&INCLUDE TYPE wa2 AS wa2 RENAMING WITH SUFFIX 2.&&&&TYPES END OF wa.&&&&CLASS-DATA out TYPE REF TO if_demo_output.ENDCLASS.&CLASS demo IMPLEMENTATION.&&METHOD main.&&&&DATA itab TYPE TABLE OF wa.&&&&out-&begin_section( `Inner Joins`&&&&&&)-&begin_section( `demo1 INNER JOIN demo2` ).&&&&SELECT t1~a AS a1, t1~b AS b1, t1~c AS c1, t1~d AS d1,&&&&&&&&&& t2~d AS d2, t2~e AS e2, t2~f AS f2, t2~g AS g2, t2~h AS h2&&&&&& FROM demo_join1 AS t1&&&&&&&& INNER JOIN demo_join2 AS t2 ON t2~d = t1~d&&&&&& ORDER BY t1~d&&&&&& INTO CORRESPONDING FIELDS OF TABLE @itab.&&&&out-&write( itab&&&&&&)-&next_section( `demo2 INNER JOIN demo1` ).&&&&SELECT t1~a AS a1, t1~b AS b1, t1~c AS c1, t1~d AS d1,&&&&&&&&&& t2~d AS d2, t2~e AS e2, t2~f AS f2, t2~g AS g2, t2~h AS h2&&&&&& FROM demo_join2 AS t2&&&&&&&& INNER JOIN demo_join1 AS t1 ON t1~d = t2~d&&&&&& ORDER BY t1~d&&&&&& INTO CORRESPONDING FIELDS OF TABLE @itab.&&&&out-&write( itab&&&&&&)-&end_section(&&&&&&)-&next_section( `Outer Joins`&&&&&&)-&begin_section( `demo1 LEFT OUTER JOIN demo2` ).&&&&SELECT t1~a AS a1, t1~b AS b1, t1~c AS c1, t1~d AS d1,&&&&&&&&&& t2~d AS d2, t2~e AS e2, t2~f AS f2, t2~g AS g2, t2~h AS h2&&&&&& FROM demo_join1 AS t1&&&&&&&& LEFT OUTER JOIN demo_join2 AS t2 ON t2~d = t1~d&&&&&& ORDER BY t1~d&&&&&& INTO CORRESPONDING FIELDS OF TABLE @itab.&&&&out-&write( itab&&&&&&)-&next_section( `demo2 LEFT OUTER JOIN demo1` ).&&&&SELECT t1~a AS a1, t1~b AS b1, t1~c AS c1, t1~d AS d1,&&&&&&&&&& t2~d AS d2, t2~e AS e2, t2~f AS f2, t2~g AS g2, t2~h AS h2&&&&&& FROM demo_join2 AS t2&&&&&&&& LEFT OUTER JOIN demo_join1 AS t1 ON t1~d = t2~d&&&&&& ORDER BY t1~d&&&&&& INTO CORRESPONDING FIELDS OF TABLE @itab.&&&&out-&write( itab&&&&&&)-&end_section(&&&&&&)-&begin_section( `demo1 RIGHT OUTER JOIN demo2` ).&&&&SELECT t1~a AS a1, t1~b AS b1, t1~c AS c1, t1~d AS d1,&&&&&&&&&& t2~d AS d2, t2~e AS e2, t2~f AS f2, t2~g AS g2, t2~h AS h2&&&&&& FROM demo_join1 AS t1&&&&&&&& RIGHT OUTER JOIN demo_join2 AS t2 ON t2~d = t1~d&&&&&& ORDER BY t1~d&&&&&& INTO CORRESPONDING FIELDS OF TABLE @itab.&&&&out-&write( itab&&&&&&)-&next_section( `demo2 RIGHT OUTER JOIN demo1` ).&&&&SELECT t1~a AS a1, t1~b AS b1, t1~c AS c1, t1~d AS d1,&&&&&&&&&& t2~d AS d2, t2~e AS e2, t2~f AS f2, t2~g AS g2, t2~h AS h2&&&&&& FROM demo_join2 AS t2&&&&&&&& RIGHT OUTER JOIN demo_join1 AS t1 ON t1~d = t2~d&&&&&& ORDER BY t1~d&&&&&& INTO CORRESPONDING FIELDS OF TABLE @itab.&&&&out-&display( itab ).&&ENDMETHOD.&&METHOD class_constructor.&&&&DATA: itab1 TYPE TABLE OF wa1 WITH EMPTY KEY,&&&&&&&&&&itab2 TYPE TABLE OF wa2 WITH EMPTY KEY.&&&&out = cl_demo_output=&new( )-&begin_section( `Database Tables` ).&&&&itab1 = VALUE #( ( a = 'a1' b = 'b1' c = 'c1'&&d = 'uu' )&&&&&&&&&&&&&&&&&&&& ( a = 'a2' b = 'b2' c = 'c2'&&d = 'uu' )&&&&&&&&&&&&&&&&&&&& ( a = 'a3' b = 'b3' c = 'c3'&&d = 'vv' )&&&&&&&&&&&&&&&&&&&& ( a = 'a4' b = 'b4' c = 'c4'&&d = 'ww' )&&&&&&&&&&&&&&&&&&&&).&&&&itab2 = VALUE #( ( d = 'uu' e = 'e1' f = 'f1'&&g = 'g1'&&h = 'h1' )&&&&&&&&&&&&&&&&&&&& ( d = 'ww' e = 'e2' f = 'f2'&&g = 'g2'&&h = 'h2' )&&&&&&&&&&&&&&&&&&&& ( d = 'xx' e = 'e3' f = 'f3'&&g = 'g3'&&h = 'h3' )&&&&&&&&&&&&&&&&&&&&).&&&&DELETE FROM demo_join1.&&&&INSERT demo_join1 FROM TABLE @itab1.&&&&DELETE FROM demo_join2.&&&&INSERT demo_join2 FROM TABLE @itab2.&&&&out-&begin_section( `demo1`&&&&&&)-&write( itab1&&&&&&)-&next_section( `demo2`&&&&&&)-&write( itab2&&&&&&)-&end_section(&&&&&&)-&end_section( ).&&ENDMETHOD.ENDCLASS.&START-OF-SELECTION.&&demo=&main( ).
支付宝打赏
如果文章对你有所帮助,欢迎点击上方按钮打赏网站
最后编辑于:作者:石头
该用户很懒,还没有介绍自己。
七月 22, 2017
七月 21, 2017
七月 10, 2017
七月 10, 2017
插入或编辑链接
输入目标URL
在新标签页中打开链接
或链接到站点中的内容
未指定搜索条件。自动显示近期条目。
搜索或使用上下方向键来选择一项。Inner&join,outer&join,left&join,right&join的区别
外联接外联接可以是左向外联接、右向外联接或完整外部联接。&
在 FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定:
LEFT JOIN 或 LEFT OUTER JOIN。&左向外联接的结果集包括 LEFT OUTER
子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
JOIN 或 RIGHT OUTER JOIN。&
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
FULL JOIN 或 FULL OUTER JOIN。&
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
id&&&&&&&&&&&&&&name
1&&&&&&&&&&&&&&
2&&&&&&&&&&&&&&
3&&&&&&&&&&&&&&
id&&&&&&&&&&&&&&store
1&&&&&&&&&&&&&&15
2&&&&&&&&&&&&&&10
4&&&&&&&&&&&&&&67
inner join :
select&*&from&a&inner&join&b&on&a.id=b.id
结果:(只显示id匹配的选项)
id&&&&&&&&&&&&name&&&&&&&&&&&&
id&&&&&&&&&&&
1&&&&&&&&&&&&&&a&&&&&&&&&&&&&&&&
1&&&&&&&&&&&&
2&&&&&&&&&&&&&&b&&&&&&&&&&&&&&&&
2&&&&&&&&&&&&
内连接还有以下写法:
select&*&from&a&inner&join&b&where&a.id=b.id
select&*&from&a,b&where&a.id=b.id&--连接查询的另一种写法
select&*&from&a&as&e,b&as&r&where&e.id=r.id&--使用as定义别名,当表名很长时有用
select&*&from&a&e,b&r&where&e.id=r.id&--定义别名时可以省掉as
外连接分左外连接和右外连接
左外连接:
select&*&from&a&left&outer&join&b&on&a.id=b.id
select&*&from&a&left&join&b&on&a.id=b.id
结果:(除了显示匹配记录,还显示a表中所有的记录)
id&&&&&&&&&&&&name&&&&&&&&&&&&id&&&&&&&&&&&&stroe
1&&&&&&&&&&&&&&a&&&&&&&&&&&&&&&&
1&&&&&&&&&&&&
2&&&&&&&&&&&&&&b&&&&&&&&&&&&&&&&
2&&&&&&&&&&&&
3&&&&&&&&&&&&&&c&&&&&&&&&&&&&&&&\N&&&&&&&&&&&&
右外连接:
select&*&from&a&right&outer&join&b&on&a.id=b.id
select&*&from&a&right&join&b&on&a.id=b.id
结果:(除了显示匹配的记录,还显示右表中所有的记录)
id&&&&&&&&&&&&name&&&&&&&&&&&&id&&&&&&&&&&&&store
1&&&&&&&&&&&&&&a&&&&&&&&&&&&&&&&1&&&&&&&&&&&&&&15
2&&&&&&&&&&&&&&b&&&&&&&&&&&&&&&&2&&&&&&&&&&&&&&10
\N&&&&&&&&&&&&\N&&&&&&&&&&&&&&
4&&&&&&&&&&&&&&67
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。left join 和 left outer join 的区别_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
left join 和 left outer join 的区别
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩7页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢解答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中国
查看更多评论
敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。
时隔一个月,数据库市场经过一轮“洗牌”,旧的市场格局是否会被打破,曾经占巨大市场份额的企业是否可能失去优势?
Sparc和Solaris都是Oracle云计划的一部分,但是硬件和支持人员的减少意味着本地Solaris和Sparc将变得更加稀少。
今年1月份,随着Amazon Web Services和Azure云端运行长时间的软件列表,Oracle几乎不用担心客户需要的处理器许可证数量。
2016年下半年,数据库排行榜的前二十名似乎都“固守阵地”,在排名上没有太大的变动。随着2017年的悄然而至,数据库的排名情况是否会有新的看点?
数据库安全威胁和数据偷窃的发生率在不断增加,而行业专家认为如果想要在2010年及以后继续保护敏感信息,大多数组织需要重新考虑他们的数据库安全性策略。
在上一个技术专题中我们提到了数据库安全,本篇继续介绍数据库安全的内容,包括如何限制用户的访问权限,并详细阐述了有关如何限制单一用户的访问权限、限制多个用户的访问权限、确保不同用户的安全以及如何限制用户使用其他方式访问数据库这四个方面的内容。
变化数据捕获就是我们通常提到的CDC&(Change&Data&Capture),是用来描述捕捉增量变化应用数据到其他数据库或数据源。随着数据量的不断增长和数据存储日益变化,变化数据捕获在生产系统中特别重要。
本系列文章由三部分组成,为Oracle数据库管理员(DBA)面试成功的必备手册。本专题内容囊括从DBA最初的面试开始,从写“杀手简历”到求职信、到面试过程到Oracle认证再到上升到公司高层最后到你成为公司里的明星DBA。专家为你一一指点迷津,最终让你登上成功的宝座。
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。

我要回帖

更多关于 hive left outer join 的文章

 

随机推荐