首页 > 编程知识 正文

左外连接查询,oracle左连接查询

时间:2023-05-05 14:38:08 阅读:147834 作者:959

有三种类型的Oracleconnection查询:交叉连接、内部连接和外部连接。

交叉连接结果是其他连接结果的超集,而外连接结果是内连接结果的超集。

以下示例以departments_v和employees_v这两个可查看对象为例。 (部门数据4条,人员数据9条)。

1 .交叉连接:也称为病历连接,是两个或多个表之间的无条件连接,用于连接表1中的每个数据和表2中的每个数据,结果为4*9=36个数据

2 .内连接:基于指定的连接条件执行连接查询,因此结果集中会显示满足连接条件的数据。

当两个表进行内连接查询时,首先找到表1中的第一条记录,然后从头到尾扫描表2,连接符合连接条件的记录和表1中的第一条记录以获得结果;

表2扫一遍后,从表1的第二条记录开始,从头到尾扫表2,符合结合条件的与表1的第二条记录结合得到结果.

:

直到表1中的所有记录都已处理。

在Oracle中,内连接的两种格式如下图所示

3 .外连接:除了内连接外,还将某些连接表不符合连接条件的记录添加到结果集中。

在Oracle中,左外部连接、右外部连接都有两种连接方式。

首先看标准SQL语句的连接方式

【左外连接】除了内连接外,还将连接操作符左侧的表中不符合连接条件的记录添加到结果集中,并用空值填充右侧的表。 (我个人认为适合说明标准SQL语句的连接方法。)

下图为【dept表left join emp表】,此时可以以dept表为准。 连接条件是两表的部门编号相同,部门编号为10。

左表dept 10号部门记录和右表emp 10号部门员工记录符合连接条件,加入结果集;

左表中的dept 20号部门记录和右表中的emp 20号部门员工记录不符合连接条件,但由于此查询是左连接,因此左表中的dept 20号部门记录将添加到结果集中,右表用空值填充;

.

下图可以在【emp表left join dept表】以上的状况下分析

【右外连接】除了内连接外,连接操作符右侧的表还将不符合连接条件的记录添加到结果集中,左侧的表用空值填充。 (我个人认为适合说明标准SQL语句的连接方法。)

下图为dept表right join emp表】此时,可以以emp表为准。 连接条件是两表的部门编号相同,部门编号为10。

右表emp 10号部门员工记录和左表dept 10号部门记录符合连接条件,添加到结果集中;

右表中的emp 20号部门员工记录和左表中的dept 20号部门记录不符合连接条件,但由于此查询是右连接,右表中的emp 20号部门员工记录将添加到结果集中,左表用空值填充。

.

下图为emp表right join dept表】可根据以上情况进行分析

Oracle扩展的连接方式

(下图为dept () emp】)右外连接) )。

【右外连接】除了内连接外,连接操作符右侧的表还将不符合连接条件的记录添加到结果集中,左侧的表用空值填充。

因此,可以进行这样的分析:连接条件等号中的两个表都用null填充,两个表中的列都用()填充,而另一个表向结果集添加不符合连接条件的记录。 下图的emp表

交换表的顺序为employees_v emp、departments_v dept,但结果相同,但结果的列顺序也与EMPLOYEE_ID、FIRST_NAME、DEPARTMENT_ID进行交换

下图为dept emp () (左外部连接) )。

【左外连接】除了内连接外,还将连接操作符左侧的表中不符合连接条件的记录添加到结果集中,并用空值填充右侧的表。

因此,可以进行这样的分析:连接条件等号中的两个表都用null填充,两个表中的列都用()填充,而另一个表向结果集添加不符合连接条件的记录。 下图的dept表

虽然交换表的顺序与employees_v emp、departments_v dept (在这种情况下被称为右外连接)的结果相同,但是结果列顺序也是EMPLOYEE_ID、FIRST_NAME

! 必须将所有() )添加到dept表的列中,但其功能与下图所示的内连接查询类似。

4 .全外连接:除了内连接外,还将连接操作符两侧的表不符合连接条件的记录添加到结果集中。

所有外部连接仅标准

SQL语句的连接方式表示。

分析:将满足条件的记录选出,再将一侧emp表中不满足连接条件的记录加入结果集,最后将另一侧dept表中不满足连接条件的记录加入结果集。

下图为去掉一个条件,分析可按照上图情况推理。

比同样连接条件的【内连接】多了最后一条记录:

总结:(个人理解方式)

标准SQL语句连接方式:

【A left join B】left join即把左边表A当作基准。在内连接操作方式下,遇到符合连接条件的记录加入结果集,遇到A中不符合条件的记录也加入(因为它是标准),但对应B表的记录用null填充;

【A right join B】right join即把右边表B当作基准。在内连接操作方式下,遇到符合连接条件的记录加入结果集,遇到B中不符合条件的记录也加入(因为它是标准),但对应A表的记录用null填充;

oracle扩展连接方式:连接条件哪边表的列用(+),则它的记录用null值填充(也可把null当作占位符一样,没有东西空占着位置),另一边的表就是会把不符合连接条件的记录也加进查询结果中。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。