首页 > 数据库技术 > 详细

Oracle_多表连接

时间:2014-07-10 10:44:05      阅读:413      评论:0      收藏:0      [点我收藏+]

盗亦有道:http://www.blogjava.net/hello-yun/archive/2011/04/08/347890.html

TESTA,TESTB,TESTC,各有A, B两列:

TESTA(A,B) |    TESTB(A,B)   |    TESTC(A,B)

001      10A    |    001     10B     |    001    10C

002      20A    |    003     30B     |    004    30C

 

连接分为两种:内连接与外连接。

 

A.内连接:

 

内连接,即最常见的等值连接,例:

 

SELECT * 
FROM TESTA,TESTB
WHERE TESTA.A=TESTB.A


结果:

TESTA(A,B)    |    TESTB(A,B)

001    10A     |     001     10B

 

B.外连接

 

外连接分为左外连接,右外连接和全外连接。

 

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(+)

 

结果:

TESTA(A,B)    |    TESTB(A,B)

001     10A    |     001     10B

002     20A    |    

 

三个表做左外连接

 

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

 

Oracle 支持的另外一种写法

 

SELECT *
FROM TESTA,TESTB,TESTC
WHERE TESTA.A=TESTB.A(+)
AND TESTA.A=TESTC.A(+)

 

结果:

TESTA(A,B)    |     TESTB(A,B)    |     TESTC(A,B)

001     10A     |      001     10B    |      001    10C

002     20A     |

 

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

 

结果:

 

TESTA(A,B)    |    TESTB(A,B)

 

001     10A     |     001     10B

                       |    003      20B

 

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

 

结果:

 

TESTA(A,B)    |    TESTB(A,B)

 

 

001     10A     |     001     10B

002     20A     |  

        |     003     20B

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Oracle_多表连接,布布扣,bubuko.com

Oracle_多表连接

原文:http://www.cnblogs.com/benjia/p/3812283.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!