Oracle内连接、外连接、右外连接、全外连接小总结
2016-03-28 13:57
513 查看
数据库版本:Oracle 9i
表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
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
结果:<
9f47
/span>
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,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 |
外连接分为左外连接,右外连接和全外连接。
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 | 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(+)
结果:
A | B | A | B | A | B |
001 | 10A | 001 | 10B | 001 | 10C |
002 | 20A |
右外连接是在等值连接的基础上加上被连接表的不匹配数据
SELECT *
FROM TESTA
RIGHT OUTER JOIN TESTB
ON TESTA.A=TESTB.A
Oracle支持的另一种写法
SELECT *
FROM TESTA,TESTB
WHERE TESTA.A(+)=TESTB.A
结果:<
9f47
/span>
A | B | A | B |
001 | 10A | 001 | 10B |
003 | 30B |
全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上
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 |
相关文章推荐
- oracle latch工作原理
- oracle安装数据库
- AWS挑战数据库市场 Oracle不以为意
- 甲骨文推出全新Oracle Cloud at Customer
- Ubuntu 14.04 LTS 64位安装Oracle 11g (二)
- Ubuntu 14.04 LTS 64位安装Oracle 11g (一)
- Oracle、MySql数据分页查询
- Linux安装Oracle
- Oracle ERP 的前世今生
- Oracle插入特殊字符 “&” 和 空格
- oracle修改表信息
- Oracle Study之-AIX6.1构建Oracle 10gR2 RAC(2)
- Oracle Study之-AIX6.1构建Oracle 10gR2 RAC(2)
- Jmeter之JDBC Request使用方法(oracle)
- oracle查询语句
- Oracle:Ora-01791 不是Selected表达式
- oracle中with的用法及用处
- ORACLE使用WITH AS和HINT MATERIALIZE优化SQL解决FILTER效率低下
- oracle新增修改表字段+注释
- oracle数据库导入导出命令