赞
踩
Oracle 左外连接、右外连接、全外连接小总结:
1.左外连接:
left outer join 或者 left join
左外连接就是在等值连接的基础上加上主表中的未匹配数据,例:
SELECT *
FROM TESTA
LEFT OUTER JOIN TESTB
ON TESTA.A=TESTB.A
Oracle 支持另一种写法
SELECT *
FROM TESTA,TESTB
WHERE TESTA.A=TESTB.A(+)
此sql获取的结果集为:TESTA.a与TESTB.a相等的数据加上TESTA表中 TESTA.a与TESTB.a两个字段不匹配的数据;
用(+)来实现, 这个+号可以这样来理解: + 表示补充,即哪个表有加号,这个表就是匹配表。
所以加号写在右表,左表就是全部显示,故是左连接。
2.右外连接:
right outer join 或者 right join
右外连接是在等值连接的基础上加上被连接表的不匹配数据
SELECT *
FROM TESTA
RIGHT OUTER JOIN TESTB
ON TESTA.A=TESTB.A
Oracle支持的另一种写法
SELECT *
FROM TESTA,TESTB
WHERE TESTA.A(+)=TESTB.A
此sql获取的结果集为:TESTA.a与TESTB.a相等的数据加上TESTB表中 TESTA.a与TESTB.a两个字段不匹配的数据;
用(+)来实现, 这个+号可以这样来理解: + 表示补充,即哪个表有加号,这个表就是匹配表。
所以加号写在左表,右表就是全部显示,故是右连接。
3.全外连接:
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
此sql获取的结果集为:TESTA.a与TESTB.a相匹配的结果和TESTA.a与TESTB.a不匹配的结果
总结:
Oracle 外连接
(1)左外连接 (左边的表不加限制)
(2)右外连接(右边的表不加限制)
(3)全外连接(左右两表都不加限制)
oracle中使用+注意事项:
对于外连接, 也可以使用“(+) ”来表示。 关于使用(+)的一些注意事项:
1.(+)操作符只能出现在where子句中,并且不能与outer join语法同时使用。
2. 当使用(+)操作符执行外连接时,如果在where子句中包含有多个条件,则必须在所有条件中都包含(+)操作符
3.(+)操作符只适用于列,而不能用在表达式上。
4.(+)操作符不能与or和in操作符一起使用。
5.(+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。
6. (+)写在左表,右表就全显示,故是右连接;
7.(+)写在右边,左边就全显示,故是左连接;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25462274/viewspace-2123257/,如需转载,请注明出处,否则将追究法律责任。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。