Oracle SQL外连接

摘要:
SQL提供多种类型的连接方法。它们之间的区别在于,用于从不同的重叠数据集中选择要连接的行的方法不同。表TESTA、TESTB和TESTC分别有A和B列。AB00110A00220AAB00110B00330BAB0110C00440C连接分为两种类型:内部连接和外部连接。A、 内部连接内部连接是最常见的等效连接,例如:SELECT*FROMTESTA、TESTBWHETERESTA。A=测试b。A结果ABAB00110A00110BB。外部连接外部连接分为左外部连接、右外部连接和全外部连接。FULLOUTERJOIN:选择所有外部关联。姓e。部门id,d。部门_名称FROMemployeeseFULLOUTERJOIN部门sdON;结果是:所有员工和相应部门的记录,包括没有相应部门编号的部门_带ID的员工记录和没有任何员工的部门记录。

SQL提供了多种类型的连接方式,它们之间的区别在于:从相互交叠的不同数据集合中选择用于连接的行时所采用的方法不同。
Oracle SQL外连接第1张连接类型        定义
Oracle SQL外连接第1张内连接           只连接匹配的行
Oracle SQL外连接第1张左外连接        包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行
Oracle SQL外连接第1张右外连接        包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行
Oracle SQL外连接第1张全外连接        包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。

表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

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

结果:

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

    

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

结果:

A

B

A

B

001

10A

001

10B

  

003

30B

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

结果:

A

B

A

B

001

10A

001

10B

002

20A

  
  

003

30B

觉得这篇文章写的真好,简洁、明了、清晰:

https://www.cnblogs.com/steel-chen/p/6781347.html

含义理解:

Oracle中可以使用“(+) ”来表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN 

LEFT OUTER JOIN:左外关联 
SELECT e.last_name, e.department_id, d.department_name 
FROM employees e 
LEFT OUTER JOIN departments d 
ON (e.department_id = d.department_id); 
等价于 
SELECT e.last_name, e.department_id, d.department_name 
FROM employees e, departments d 
WHERE e.department_id=d.department_id(+) 
结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录RIGHT OUTER JOIN:右外关联 
SELECT e.last_name, e.department_id, d.department_name 
FROM employees e 
RIGHT OUTER JOIN departments d 
ON (e.department_id = d.department_id); 
等价于 
SELECT e.last_name, e.department_id, d.department_name 
FROM employees e, departments d 
WHERE e.department_id(+)=d.department_id 
结果为:所有员工及对应部门的记录,包括没有任何员工的部门记录FULL OUTER JOIN:全外关联 
SELECT e.last_name, e.department_id, d.department_name 
FROM employees e 
FULL OUTER JOIN departments d 
ON (e.department_id = d.department_id); 
结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录和没有任何员工的部门记录。 

参考:https://www.cnblogs.com/likeju/p/4951974.html

 

扫个红包吧!

Oracle SQL外连接第6张

Donate捐赠

如果我的文章帮助了你,可以赞赏我 1 元,让我继续写出更好的内容)

Oracle SQL外连接第7张   Oracle SQL外连接第8张

  (微信)                                        (支付宝)

微信/支付宝 扫一扫

免责声明:文章转载自《Oracle SQL外连接》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇js金额转大写(万元为单位)vue--axios发送请求下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle-检查数字中有无这符

方法一 返回值为NULL的表示字符串,返回值大于等于1的表示有非数字字符 select   lengthb(ltrim( '1248346 ', '0123456789 '))   from   dual; 或 select   lengthb(rtrim( '1248346a ', '0123456789 '))   from   dual; 方法二 返...

Linux平台Oracle 12.1.0.2 单实例安装部署

主题:Linux平台Oracle 12.1.0.2 单实例安装部署环境:RHEL 6.5 + Oracle 12.1.0.2需求:安装部署OEM 13.2需要Oracle 12.1.0.2版本作为资料库 1.下载介质 目前从OTN就可以直接下载到12.1.0.2的介质。 linuxamd64_12102_database_1of2.zip linuxamd...

oracle--pl/sql变量定义----

一、变量介绍 在编写pl/sql程序时,可以定义变量和常量;在pl/sql程序中包括有: 1)、标量类型(scalar) 2)、复合类型(composite) --用于操作单条记录 3)、参照类型(reference) --用于操作多条记录 4)、lob(large object) 二、标量(scalar)——常用类型 1)、在编写pl/sql块时,如果...

oracle11g-linux 归档处理

在使用oracle时突然登录不上去了提示:ORA-00257:archiver error.Connect internal only,until freed. 查遍很多资料,都指向“归档日志空间不足导致”这一问题。查看磁盘空间提示磁盘已使用100%。看来就是这个问题了; 问题解决 1.首先删除物理磁盘归档文件。(删除之前最好先备份) 网上大多都说归档文...

MySQL存储过程之事务管理

  MySQL存储过程之事务管理 ACID:Atomic、Consistent、Isolated、Durable 存储程序提供了一个绝佳的机制来定义、封装和管理事务。 1,MySQL的事务支持 MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关: Java代码 1         MyISAM:不支持事务,用于只读程序提高性能 ...

tp5 中 model 的查询方法

实例化模型后调用查询方法,可以写任何想要的查询(推荐) public function select(){ $user = model('User'); $data = $user -> where('status',1) ->limit(10) ->...