Oracle_多表连接   _MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1920 | 回复: 0   主题: Oracle_多表连接           下一篇 
Koei111
注册用户
等级:列兵
经验:81
发帖:42
精华:0
注册:2011-7-22
状态:离线
发送短消息息给Koei111 加好友    发送短消息息给Koei111 发消息
发表于: IP:您无权察看 2015-5-13 9:49:59 | [全部帖] [楼主帖] 楼主

表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


--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论