`
yzd
  • 浏览: 1809703 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Oracle内连接、外连接、右外连接、全外连接小总结

阅读更多

数据库版本: Oracle 9i

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

A

B

001

10A

002

20A

A

B

001

10B

003

30B

A

B

001

10C

004

40C

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

A .内连接

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

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


结果

A

B

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

结果:

A

B

A

B

001

10A

001

10B

002

10B

三个表做左外连接

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

结果:

A

B

A

B

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

结果:

A

B

A

B

001

10A

001

10B

003

30B

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

结果:

A

B

A

B

001

10A

001

10B

002

20A

003

30B

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics