【Oracle】内连接、外连接、(+)的使用

来源:互联网 发布:淘宝客服不理人怎么办 编辑:程序博客网 时间:2024/06/06 06:54
表各有A, B两列
AB00110A00220A
AB00110B00330B
AB00110C00440C
连接分为两种:内连接与外连接。
A.内连接
内连接,即最常见的等值连接,例:
SELECT * FROM TESTA,TESTBWHERE TESTA.A=TESTB.A
结果
ABAB00110A00110B
B.外连接
外连接分为左外连接,右外连接和全外连接。
1.  左外连接 left outer join 或者 left join
左外连接就是在等值连接的基础上加上主表中的未匹配数据,例:
SELECT *FROM TESTA LEFT OUTER JOIN TESTB ON TESTA.A=TESTB.A
Oracle 支持另一种写法
SELECT * FROM TESTA,TESTBWHERE TESTA.A=TESTB.A(+)
结果:
ABAB00110A00110B00220A  
三个表做左外连接
SELECT *FROM TESTA LEFT OUTER JOIN TESTB ON TESTA.A=TESTB.ALEFT OUTER JOIN TESTCON TESTA.A=TESTC.A
Oracle 支持的另外一种写法
SELECT *FROM TESTA,TESTB,TESTCWHERE TESTA.A=TESTB.A(+)AND TESTA.A=TESTC.A(+)
结果:
ABABAB00110A00110B00110C00220A    
2. 右外连接 right outer join 或者 right join
右外连接是在等值连接的基础上加上被连接表的不匹配数据
SELECT *FROM TESTA RIGHT OUTER JOIN TESTB ON TESTA.A=TESTB.A
Oracle支持的另一种写法
SELECT *FROM TESTA,TESTBWHERE TESTA.A(+)=TESTB.A
结果:
ABAB00110A00110B  00330B
3.全外连接 full outer join 或者 full join
全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上
SELECT * FROM TESTA FULL OUTER JOIN TESTBON TESTA.A=TESTB.A

全外连接的等价写法,对同一表先做左连接,然后右连接
SELECT  TESTA.*,TESTB.*FROM TESTALEFT OUTER JOIN TESTBON TESTA.A=TESTB.AUNIONSELECT TESTA.*,TESTB.*FROM TESTBLEFT OUTER JOIN TESTAON TESTA.A=TESTB.A


结果:
ABAB00110A00110B00220A    00330B

对于外连接, 也可以使用“(+) ”来表示。 关于使用(+)的一些注意事项:
       1.(+)操作符只能出现在where子句中,并且不能与outer join语法同时使用。
       2. 当使用(+)操作符执行外连接时,如果在where子句中包含有多个条件,则必须在所有条件中都包含(+)操作符
       3.(+)操作符只适用于列,而不能用在表达式上。
       4.(+)操作符不能与or和in操作符一起使用。
       5.(+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。
0 0
原创粉丝点击