外连接查询

6.1.3  外连接查询

与内连接不同,外连接是指使用OUTER JOIN关键字将两个表连接起来。外连接生成的结果集不仅包含符合连接条件的行数据,而且还包括左表(左外连接时的表)、右表(右外连接时的表)或两边连接表(全外连接时的表)中所有的数据行。

外连接分为左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)和全外连接3种类型。

1.左外连接查询

左外连接(LEFT OUTER JOIN)是指将左表中的所有数据分别与右表中的每条数据进行连接组合,返回的结果除内连接的数据外,还包括左表中不符合条件的数据,并在右表的相应列中添加NULL值。下面通过实例讲解使用左外连接查询数据的实现方法。

【实例6-3】使用左外连接的查询方式将"职员信息"和"职务信息"数据表连接起来,使得能够从这两个数据表中查询数据信息。其具体实现如代码6.3所示。

代码6.3

 
  1. 01  SELECT a.编号,a.姓名,a.部门编号,  
  2. 02         a.年龄,a.现住址,b.职务名称  
  3. 03  FROM   职员信息 as a  
  4. 04         LEFT OUTER JOIN 职务信息 as b   
  5. 05         ON a.职务编号 = b.职务编号  
  6. 06  ORDER BY a.编号 

【执行代码】代码执行以后,查询的数据结果如图6.3所示。

 
图6.3  使用左外连接查询数据信息

说明:在执行左外连接查询的查询结果集中,将在"职员信息"数据表中不存在"职务编号"的"职务名称"字段中添加NULL。

【深入学习】关于上述代码的分析如下所示:

第1~2行指定从两个数据表中查询的列名称。

第3~5行使用左外连接查询数据表,并通过别名设置数据表的连接条件。

第6行使用ORDER BY语句将查询的结果集按照编号进行升序排序。

2.右外连接查询

右外连接(RIGHT OUTER JOIN)是指将右表中的所有数据分别与左表中的每条数据进行连接组合,返回的结果除内连接的数据外,还包括右表中不符合条件的数据,并在左表的相应列中添加NULL。

下面通过实例讲解使用右外连接查询数据的实现方法。

【实例6-4】使用右外连接的查询方式将"职员信息"和"职务信息"数据表连接起来,使得能够从这两个数据表中查询数据信息。其具体实现如代码6.4所示。

代码6.4

 
  1. 01  SELECT a.编号,a.姓名,a.部门编号,  
  2. 02         a.年龄,a.现住址,b.职务名称  
  3. 03  FROM   职员信息 as a  
  4. 04         RIGHT OUTER JOIN 职务信息 as b   
  5. 05         ON a.职务编号 = b.职务编号  
  6. 06  ORDER BY a.编号 

【执行代码】代码执行以后,查询的数据结果如图6.4所示。

 
图6.4  使用右外连接查询数据信息

说明:在执行右外连接查询的查询结果集中,将在"职员信息"数据表中不存在"职务编号"的"编号"、"姓名"、"部门编号"、"年龄"和"现住址"字段中添加NULL。

【深入学习】关于上述代码的分析如下所示:

第1~2行指定从两个数据表中查询的列名称。

第3~5行使用右外连接查询数据表,并通过别名设置数据表的连接条件。

第6行使用ORDER BY语句将查询的结果集按照编号进行升序排序。

3.全外连接查询

全外连接是指将左表中的所有数据分别与右表中的每条数据都进行连接组合。返回的结果集除了内连接的数据外,还有两个表中不符合条件的数据,并在左表或右表的相应列中添加NULL。下面通过实例讲解使用全外连接查询数据的实现方法。

【实例6-5】使用全外连接的查询方式将"职员信息"和"职务信息"数据表连接起来,使得能够从这两个数据表中查询数据信息。其具体实现如代码6.5所示。

代码6.5

 
  1. 01  SELECT a.编号,a.姓名,a.部门编号,  
  2. 02         a.年龄,a.现住址,b.职务名称  
  3. 03  FROM   职员信息 as a  
  4. 04         FULL OUTER JOIN 职务信息 as b   
  5. 05         ON a.职务编号 = b.职务编号  
  6. 06  ORDER BY a.编号 

【执行代码】代码执行以后,查询的数据结果如图6.5所示。

 
图6.5  使用全外连接查询数据信息

【深入学习】关于上述代码的分析如下所示:

第1~2行指定从两个数据表中查询的列名称。

第3~5行使用全外连接查询数据表,并通过别名设置数据表的连接条件。

第6行使用ORDER BY语句将查询的结果集按照编号进行升序排序。

说明:左外连接、右外连接和全外连接之间的区别在于如何向返回不符合条件的数据列中添加NULL值。

### Oracle 数据库外连接查询的用法和示例 在外连接操作中,即使右侧表中的某些记录在侧表中没有匹配项,这些记录也会被保留并显示出来。Oracle 支持三种类型的外连接外连接、右外连接以及全外连接。 #### 外连接 (LEFT OUTER JOIN) 当执行 `LEFT OUTER JOIN` 时,如果右边表格里不存在对应的行,则返回的结果集中会包含来自边表格的所有数据,并且右边表格对应列的位置上填充 NULL 值[^1]。 ```sql SELECT e.employee_id, d.department_name FROM employees e LEFT OUTER JOIN departments d ON e.department_id = d.department_id; ``` 此查询将列出所有员工及其所属部门名称;如果有任何员工不属于任何一个特定部门,则该员工所在行的 department_name 字段为空(NULL)。 #### 右外连接 (RIGHT OUTER JOIN) 与此相反,在使用 `RIGHT OUTER JOIN` 的情况下,即便边表格缺少相应的配对关系,最终结果仍然保持完整的右边表格的数据集不变,而缺失部分则由NULL补充。 ```sql SELECT e.employee_id, d.department_name FROM employees e RIGHT OUTER JOIN departments d ON e.department_id = d.department_id; ``` 这段SQL语句用于获取所有的部门列表连同它们所拥有的雇员信息;对于那些没有任何成员加入的部门而言,employee_id 将呈现为null状态。 #### 完全外连接 (FULL OUTER JOIN) 最后一种形式叫做完全外部联接(`FULL OUTER JOIN`),它综合了上述两种方式的特点——无论哪一侧都没有找到相匹配的对象都将出现在输出之中,未匹配的地方同样以NULL表示。 ```sql SELECT e.employee_id, d.department_name FROM employees e FULL OUTER JOIN departments d ON e.department_id = d.department_id; ``` 这条命令可以用来展示整个企业架构下的人力资源分布状况,即不仅涵盖了已分配到具体岗位上的工作人员详情,同时也包含了尚未有人任职的关键职位空缺情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值