Oracle内连接、左外连接、右外连接、全外连接小总结
2016-03-18 15:10
447 查看
表TESTA,TESTB,TESTC,各有A, B两列
连接分为两种:内连接与外连接。
A.内连接
内连接,即最常见的等值连接,例:
SELECT *
FROM TESTA,TESTB
WHERE TESTA.A=TESTB.A
结果
B.外连接
外连接分为左外连接,右外连接和全外连接。
1. 左外连接 left outer join 或者 left join
左外连接就是在等值连接的基础上加上主表中的未匹配数据,例:
SELECT *
FROM TESTA
LEFTOUTERJOIN TESTB
ON TESTA.A=TESTB.A
Oracle 支持另一种写法
SELECT *
FROM TESTA,TESTB
WHERE TESTA.A=TESTB.A(+)
结果:
三个表做左外连接
SELECT *
FROM TESTA
LEFTOUTERJOIN TESTB
ON TESTA.A=TESTB.A
LEFTOUTERJOIN 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
RIGHTOUTERJOIN 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
FULLOUTERJOIN TESTB
ON TESTA.A=TESTB.A
全外连接的等价写法,对同一表先做左连接,然后右连接
SELECT TESTA.*,TESTB.*
FROM TESTA
LEFTOUTERJOIN TESTB
ON TESTA.A=TESTB.A
UNION
SELECT TESTA.*,TESTB.*
FROM TESTB
LEFTOUTERJOIN TESTA
ON TESTA.A=TESTB.A
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 |
外连接分为左外连接,右外连接和全外连接。
1. 左外连接 left outer join 或者 left join
左外连接就是在等值连接的基础上加上主表中的未匹配数据,例:
SELECT *
FROM TESTA
LEFTOUTERJOIN 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
LEFTOUTERJOIN TESTB
ON TESTA.A=TESTB.A
LEFTOUTERJOIN 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 |
右外连接是在等值连接的基础上加上被连接表的不匹配数据
SELECT *
FROM TESTA
RIGHTOUTERJOIN 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 |
join
全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上
SELECT *
FROM TESTA
FULLOUTERJOIN TESTB
ON TESTA.A=TESTB.A
全外连接的等价写法,对同一表先做左连接,然后右连接
SELECT TESTA.*,TESTB.*
FROM TESTA
LEFTOUTERJOIN TESTB
ON TESTA.A=TESTB.A
UNION
SELECT TESTA.*,TESTB.*
FROM TESTB
LEFTOUTERJOIN TESTA
ON TESTA.A=TESTB.A
相关文章推荐
- 朝花夕拾之Oracle 索引
- oracle显示窗口列表
- android和excel和oracle的关联
- Oracle 索引 详解
- word和oracle和adb的关联
- ORACLE 闪回技术操作
- oracle和com和javascript的关联
- oracle和dll和opencv的关联
- oracle和php和application的关联
- 远程ssh安装oracle调图形化界面报错解决方法
- Oracle 物化视图SQL记录
- 关于Oracle的rac集群和mysql Galera Cluster的想法
- 关于oracle数据库安装出现 7003/7009
- linux 自启动oracle脚本(使用oracle自带脚本)
- oracle解析xml(增加对9i版本的支持)
- Oracle Linux 6.5 安装Oracle 11G 配置
- oracle 11g dataguard 出现ORA-16143: 终端恢复过程中或之后不允许进行 RFS 连接解决方法
- 【JAVA】存储过程学习之路1(Oracle)
- oracle误删除数据恢复
- Oracle linux 安装 Oracle 11G 报错解决 error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key