Oracle、SQLserver 左连接 右连接 全连接 对比

上传人:油条 文档编号:12651362 上传时间:2017-10-20 格式:DOC 页数:9 大小:49KB
返回 下载 相关 举报
Oracle、SQLserver 左连接 右连接 全连接 对比_第1页
第1页 / 共9页
Oracle、SQLserver 左连接 右连接 全连接 对比_第2页
第2页 / 共9页
Oracle、SQLserver 左连接 右连接 全连接 对比_第3页
第3页 / 共9页
Oracle、SQLserver 左连接 右连接 全连接 对比_第4页
第4页 / 共9页
Oracle、SQLserver 左连接 右连接 全连接 对比_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《Oracle、SQLserver 左连接 右连接 全连接 对比》由会员分享,可在线阅读,更多相关《Oracle、SQLserver 左连接 右连接 全连接 对比(9页珍藏版)》请在金锄头文库上搜索。

1、Oracle 左连接、右连接、全外连接、( +)号作用 Oracle 外连接(1)左外连接 (左边的表不加限制)(2 )右外连接 (右边的表不加限制)(3 )全外连接 (左右两表都不加限制)外连接(Outer Join)outer join 则会返回每个满足第一个(顶端)输入与第二个(底端)输入的联接的行。它还返回任何在第二个输入中没有匹配行的第一个输入中的行。外连接分为三种: 左外连接,右外连接,全外连接。 对应 SQL:LEFT/RIGHT/FULL OUTER JOIN。 通常我们省略 outer 这个关键字。 写成:LEFT/RIGHT/FULL JOIN。在左外连接和右外连接时都会以

2、一张表为基表,该表的内容会全部显示,然后加上两张表匹配的内容。 如果基表的数据在另一张表没有记录。 那么在相关联的结果集行中列显示为空值(NULL)。 对于外连接, 也可以使用“(+) ”来表示。 关于使用(+)的一些注意事项:1.(+)操作符只能出现在 where 子句中,并且不能与 outer join 语法同时使用。2. 当使用( +)操作符执行外连接时,如果在 where 子句中包含有多个条件,则必须在所有条件中都包含(+)操作符3.(+)操作符只适用于列,而不能用在表达式上。4.(+)操作符不能与 or 和 in 操作符一起使用。5.(+)操作符只能用于实现左外连接和右外连接,而不能

3、用于实现完全外连接。在做实验之前,我们先将 dave 表和 bl 里加一些不同的数据。 以方便测试。 SQL select * from bl;ID NAME- -1 dave2 bl3 big bird4 exc9 怀宁SQL select * from dave;ID NAME- -8 安庆1 dave2 bl1 bl2 dave3 dba4 sf-express5 dmm2.1 左外连接(Left outer join/ left join)left join 是以左表的记录为基础的 ,示例中 Dave 可以看成左表,BL 可以看成右表,它的结果集是Dave 表中的数据,在加上 Dave

4、 表和 BL 表匹配的数据。换句话说 ,左表(Dave)的记录将会全部表示出来,而右表(BL) 只会显示符合搜索条件的记录。BL 表记录不足的地方均为 NULL.示例:SQL select * from dave a left join bl b on a.id = b.id;ID NAME ID NAME- - - -1 bl 1 dave1 dave 1 dave2 dave 2 bl2 bl 2 bl3 dba 3 big bird4 sf-express 4 exc5 dmm - 此处 B 表为 null,因为没有匹配到8 安庆 - 此处 B 表为 null,因为没有匹配到SQL se

5、lect * from dave a left outer join bl b on a.id = b.id; ID NAME ID NAME- - - -1 bl 1 dave1 dave 1 dave2 dave 2 bl2 bl 2 bl3 dba 3 big bird4 sf-express 4 exc5 dmm8 安庆用(+)来实现, 这个+ 号可以这样来理解: + 表示补充,即哪个表有加号,这个表就是匹配表。所以加号写在右表,左表就是全部显示,故是左连接。SQL Select * from dave a,bl b where a.id=b.id(+); - 注意: 用( +) 就要

6、用关键字 whereID NAME ID NAME- - - -1 bl 1 dave1 dave 1 dave2 dave 2 bl2 bl 2 bl3 dba 3 big bird4 sf-express 4 exc5 dmm8 安庆2.2 右外连接(right outer join/ right join)和 left join 的结果刚好相反,是以右表 (BL)为基础的, 显示 BL 表的所以记录,在加上 Dave 和 BL 匹配的结果。 Dave 表不足的地方用 NULL 填充.示例:SQL select * from dave a right join bl b on a.id =

7、 b.id;ID NAME ID NAME- - - -1 dave 1 dave2 bl 2 bl1 bl 1 dave2 dave 2 bl3 dba 3 big bird4 sf-express 4 exc9 怀宁 -此处左表不足用 Null 填充已选择 7 行。SQL select * from dave a right outer join bl b on a.id = b.id;ID NAME ID NAME- - - -1 dave 1 dave2 bl 2 bl1 bl 1 dave2 dave 2 bl3 dba 3 big bird4 sf-express 4 exc9 怀

8、宁 -此处左表不足用 Null 填充已选择 7 行。用(+)来实现, 这个+ 号可以这样来理解: + 表示补充,即哪个表有加号,这个表就是匹配表。所以加号写在左表,右表就是全部显示,故是右连接。 SQL Select * from dave a,bl b where a.id(+)=b.id;ID NAME ID NAME- - - -1 dave 1 dave2 bl 2 bl1 bl 1 dave2 dave 2 bl3 dba 3 big bird4 sf-express 4 exc9 怀宁2.3 全外连接(full outer join/ full join)左表和右表都不做限制,所有

9、的记录都显示,两表不足的地方用 null 填充。 全外连接不支持(+ )这种写法。示例:SQL select * from dave a full join bl b on a.id = b.id;ID NAME ID NAME- - - -8 安庆1 dave 1 dave2 bl 2 bl1 bl 1 dave2 dave 2 bl3 dba 3 big bird4 sf-express 4 exc5 dmm 9 怀宁已选择 9 行。SQL select * from dave a full outer join bl b on a.id = b.id;ID NAME ID NAME- -

10、 - -8 安庆1 dave 1 dave2 bl 2 bl1 bl 1 dave2 dave 2 bl3 dba 3 big bird4 sf-express 4 exc5 dmm sqlserver 内连接, 左连接,右连接,全连接 内连接 inner join(第 1 种写法)select a.Name,b.Name from t_Table1 a join t_Table2 b on a.ID=b.ID(第 2 种写法)select a.Name b.Name from t_Table1 a inner join t_Table2 b on a.ID=b.ID两表之间的左连接(右连接完

11、全是简单的举一反三,所以就不写了)select a.Name,b.Name from t_table1 a left join t_table b on a.ID=b.ID4 表之间的左连接(t_Table1 既需要左关联 t_Table2,又同时需要左关联t_Table3,t_Table4 无用)select a.Name,b.Name,c.Name from t_Table1 a left join t_Table2 b on a.ID=b.ID left join t_Table3 c on a.ID=c.ID,t_table4 dwhere a.ID=d.ID等连接select a.N

12、ame,b.Name from t_Table1 a,t_Table bwhere a.ID=b.ID全连接(Full join)select a.Name,b.Name from t_table1 a full join t_Table2 b on a.ID=b.ID例:party(Code,Name,Leader)Code: 政党代码Name: 政党名称Leader: 政党领袖msp(Name,Party,Constituency)Name: 议员名Party: 议员所在政党代码Constituency: 选区在介绍左连接、右连接和全连接前,有一个数据库中重要的概念要介绍一下,即空值(NULL)。有时表中,更确切的说是某些字段值,可能会出现空值, 这是因为这个数据不知道是什么值或根本就不存在。空值不等同于字符串中的空格,也不是数字类型的 0。因此,判断某个字段值是

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号