度量快速开发平台-专业、快速的软件定制快开平台

标题: oracle表连接 [打印本页]

作者: 张兴康    时间: 2020-6-1 15:18
标题: oracle表连接
有下图所示测试使用的数据库表:


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

A.内连接
内连接,即最常见的等值连接,例:
SELECT  *  FROM TESTA,TESTB  WHERE TESTA.A=TESTB.A

结果集:



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

结果集:


三个表做左外连接
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(+)

结果集:


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

结果集:


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

结果集:



作者: 张兴康    时间: 2020-6-1 15:19
坐坐再走
作者: 陈晓龙    时间: 2020-6-4 16:27
重温了下知识
作者: 张兴康    时间: 2020-6-4 16:30
陈晓龙 发表于 2016-7-4 16:27
重温了下知识

温故而知新
作者: 陈晓龙    时间: 2020-6-5 14:02
张兴康 发表于 2016-7-4 16:30
温故而知新


作者: 张兴康    时间: 2020-6-5 14:57
陈晓龙 发表于 2016-7-5 14:02

学而时习之
作者: 陈晓龙    时间: 2020-6-6 14:36
张兴康 发表于 2016-7-5 14:57
学而时习之

不亦乐夫!
作者: 张兴康    时间: 2020-6-6 14:40
陈晓龙 发表于 2016-7-6 14:36
不亦乐夫!

学而时习之,不亦说乎;你个别字大王
作者: 陈晓龙    时间: 2020-6-6 14:51
张兴康 发表于 2016-7-6 14:40
学而时习之,不亦说乎;你个别字大王

你不baidu,你晓得
作者: 张兴康    时间: 2020-6-7 17:56
陈晓龙 发表于 2016-7-6 14:51
你不baidu,你晓得

切,当我语文白学的啊,百度只是为了确认是不是我记错了
作者: 陈晓龙    时间: 2020-6-8 17:39
张兴康 发表于 2016-7-7 17:56
切,当我语文白学的啊,百度只是为了确认是不是我记错了

呵呵
............
作者: 张兴康    时间: 2020-6-11 14:42
陈晓龙 发表于 2016-7-8 17:39
呵呵
............






欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://bbs.delit.cn/) Powered by Discuz! X3.2