ITPUX技术网

交流 . 资讯 . 分享
Make progress together!
Linux操作系统下Oracle11g R2 RAC 安装配置教程
Oracle数据库备份恢复高级培训视频(案例、实战、深入、全面)
Oracle数据库DBA高级工程师培训视频(集群容灾,核心深入,备份恢复)

oracle常用的连接类型

内容发布:清晨| 发布时间:2016-9-21 11:35:21

表连接就是指多个表之间用相应的连接条件连接在一起,从多个表中获取存储在这些表中不同维度的数据。当体现在SQL上面的时候,SQL语句中的from 后面会出现多张表名,而连接条件一般在where 或者 on 关键字后面展现。

在一条SQL语句中,不管有多少张表做表连接,oracle在实际执行的时候都只能是两两表关联,依次执行,直到所有的表都连接完毕。

      我们今天主要介绍两表连接的类型:

oracle数据库中表的连接方式一般分为两种类型:内连接和外连接。一般表的连接类型可以直接决定表连接的结果。当然表的连接类型是由SQL文本的书写方式所决定的。

1、内连接:

内连接是指表的连接的连接结果只返回那些完全满足连接条件的记录。对于包含表连接的目标sql来说,只要SQL 的文本中的WHERE条件没有出现外连接的关键字比如:left outer join ; right outer join ;full outer join ,或者是oracle中自定义的用来表示外连接的关键字(+),则认定该SQL的连接类型是内连接。

我们使用oracle数据库中的自带的scott用户下的T1,T2表做实验测试。

两张表的数据分布如下:



file:///C:/Users/flybluey/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg

我们先来执行最常用的内连接的SQL语句来:

SELECT T1.*, T2.*FROM T1, T2 where T1.id = T2.id;

相应的执行结果如下:

file:///C:/Users/flybluey/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg

这种连接方式是大家最为熟悉的,返回的结果肯定就是两张表根据连接条件完全满足的结果集。另外内连接还有别的编写方式,比如:

SELECT T1.*, T2.* FROM T1  join  T2 on T1.id = T2.id;

或者:

SELECT T1.*, T2.* FROM T1 inner join  T2 on T1.id = T2.id;

上面的三种内连接的写法是等效的,其相应的执行结果:


file:///C:/Users/flybluey/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg

另外再跟大家介绍两种不太常用的写法:

SELECT T1.NAME, T2.NAME,id  FROM T1  join  T2 using(id);

SELECT   NAME,id  FROM T1 naturaljoin t2;

这两种方式都不是很常用的方法,因为语法的本身存在一定的局限性。

比如 join..using  这种方法 using 后面只能是两张表的公共列列的名字必须得一样。

而natural的方式也是一样,与之不同的是会按照所有的列明一样的作为连接条件。鉴于上述的缺点,这两种方法基本不推荐使用。

2、外连接

外连接是指表的连接结果除了包含那些完全满足连接条件的记录之外还会包含驱动表中所有不满足该连接条件的记录,同时,驱动表中所有不满足该连接条件的记录所对应的被驱动表中的查询列均会以NULL值            来填充。

外连接的连接方式包括:

left outer join ;right outer join ;full outer join 同样也可以简写为:left join ; right join ;full join 。

我们同样用上述的;两张测试表来实验外连接的几种连接方式不同,首先我们对T2表中的数据坐下调整。

在T2 中插入一条T1中所没有的记录。

我们先看左连接的查询结果:


在上述的语句中,T1表是驱动表,T2表是被驱动表,结果返回满足条件的所有T1表的记录,对于T2表不满足的字段用NULL代替。

跟左连接同理的是右连接是以右边的表驱动表,看下面的示例:


结果返回T2表的全部记录,对于T1表中的不满足连接条件的字段用NULL代替。

另外对于全连接来说,返回的结果不但包含两张表中所有满足条件的记录外,还包含两张表中所有不满足条件的记录,在这些不满足条件的记录中,所对应的另外一张表的字段使用NULL来代替。

其实在oracle 数据库中 full join 的返回结果就是两张表做了一次left join 和一次right join  然后两个结果集再做一次union all 操作。大家可以在下面测试下。





上一篇:Oracle RAC Failover 详解
下一篇:绑定执行计划案例
回复

使用道具 举报

1框架
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表