【Oracle】内连接、外连接、(+)的使用
2017-04-25 14:19
190 查看
表各有A, B两列
连接分为两种:内连接与外连接。
A.内连接
内连接,即最常见的等值连接,例:
结果
B.外连接
外连接分为左外连接,右外连接和全外连接。
1. 左外连接 left
outer join 或者 left join
左外连接就是在等值连接的基础上加上主表中的未匹配数据,例:
结果:
三个表做左外连接
Oracle 支持的另外一种写法
结果:
2. 右外连接 right
outer join 或者 right join
右外连接是在等值连接的基础上加上被连接表的不匹配数据
Oracle支持的另一种写法
结果:
3.全外连接 full
outer join 或者 full join
全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上
全外连接的等价写法,对同一表先做左连接,然后右连接
结果:
对于外连接, 也可以使用“(+) ”来表示。 关于使用(+)的一些注意事项:
1.(+)操作符只能出现在where子句中,并且不能与outer join语法同时使用。
2. 当使用(+)操作符执行外连接时,如果在where子句中包含有多个条件,则必须在所有条件中都包含(+)操作符
3.(+)操作符只适用于列,而不能用在表达式上。
4.(+)操作符不能与or和in操作符一起使用。
5.(+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。
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.AOracle 支持另一种写法
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 |
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 |
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 |
1.(+)操作符只能出现在where子句中,并且不能与outer join语法同时使用。
2. 当使用(+)操作符执行外连接时,如果在where子句中包含有多个条件,则必须在所有条件中都包含(+)操作符
3.(+)操作符只适用于列,而不能用在表达式上。
4.(+)操作符不能与or和in操作符一起使用。
5.(+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。
相关文章推荐
- 解决使用ASP无法连接 ORACLE 9i 数据库的问题。
- 在ASP.NET(C#)中使用Oralce Object For OLE 2.3连接Oracle 8.0.5数据库!
- 免安装Oracle客户端使用PL/SQL连接Oracle
- 使用instantclient连接oracle
- 免安装Oracle客户端使用PL/SQL连接Oracle
- ASP中使用Oracle Object For Ole连接Oracle数据库
- 使用OTL连接Oracle
- 使用Oracle Generic Connectivity连接SqlServer
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 使用java datasource 进行 oracle jdbc 连接
- C#使用instantclient连接 Oracle 10g
- 利用Instant Client ,不安装oracle客户端使用sqlplus连接远程数据库的步骤
- 开始使用CodeSmith3.1-解决了Oracle连接及汉字的问题
- 使用ODP.NET连接ORACLE的Web项目发布!
- 使用ArcCatalog、ArcSDE连接Oracle
- 使用 MyEclipse 插件创建 Hibernate + Struts 连接oracle实例(动画)
- 使用PHP5 通过unixODBC/easysoft oracle odbc driver 连接 ORACLE
- 解决问题记录(1)-使用OleDbProvider连接Oracle出错
- 如何使用Oracle sql developer连接Mysql数据库
- Oracle9中使用sqlplus连接远程数据库