oracle中left join,right join和 FULL OUTER JOIN  _MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1950 | 回复: 0   主题: oracle中left join,right join和 FULL OUTER JOIN          下一篇 
gang
注册用户
等级:上等兵
经验:142
发帖:79
精华:0
注册:2011-12-30
状态:离线
发送短消息息给gang 加好友    发送短消息息给gang 发消息
发表于: IP:您无权察看 2015-7-27 18:24:30 | [全部帖] [楼主帖] 楼主

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

北京联动北方科技有限公司 没有这种写法,错误的语句.

全外连接 full outer join 或者 full join

全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上

SELECT *
FROM TESTA
FULL OUTER JOIN TESTB
ON TESTA.A=TESTB.A


全外连接的等价写法,对同一表先做左连接,然后右连接

SELECT TESTA.*,TESTB.*
FROM TESTA
LEFT OUTER JOIN TESTB
ON TESTA.A=TESTB.A
UNION
SELECT TESTA.*,TESTB.*
FROM TESTB
LEFT OUTER JOIN TESTA
ON TESTA.A=TESTB.A


--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论