6.1.3 外连接查询
与内连接不同,外连接是指使用OUTER JOIN关键字将两个表连接起来。外连接生成的结果集不仅包含符合连接条件的行数据,而且还包括左表(左外连接时的表)、右表(右外连接时的表)或两边连接表(全外连接时的表)中所有的数据行。
外连接分为左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)和全外连接3种类型。
1.左外连接查询
左外连接(LEFT OUTER JOIN)是指将左表中的所有数据分别与右表中的每条数据进行连接组合,返回的结果除内连接的数据外,还包括左表中不符合条件的数据,并在右表的相应列中添加NULL值。下面通过实例讲解使用左外连接查询数据的实现方法。
【实例6-3】使用左外连接的查询方式将"职员信息"和"职务信息"数据表连接起来,使得能够从这两个数据表中查询数据信息。其具体实现如代码6.3所示。
代码6.3
- 01 SELECT a.编号,a.姓名,a.部门编号,
- 02 a.年龄,a.现住址,b.职务名称
- 03 FROM 职员信息 as a
- 04 LEFT OUTER JOIN 职务信息 as b
- 05 ON a.职务编号 = b.职务编号
- 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
- 01 SELECT a.编号,a.姓名,a.部门编号,
- 02 a.年龄,a.现住址,b.职务名称
- 03 FROM 职员信息 as a
- 04 RIGHT OUTER JOIN 职务信息 as b
- 05 ON a.职务编号 = b.职务编号
- 06 ORDER BY a.编号
【执行代码】代码执行以后,查询的数据结果如图6.4所示。
![]() |
图6.4 使用右外连接查询数据信息 |
说明:在执行右外连接查询的查询结果集中,将在"职员信息"数据表中不存在"职务编号"的"编号"、"姓名"、"部门编号"、"年龄"和"现住址"字段中添加NULL。
【深入学习】关于上述代码的分析如下所示:
第1~2行指定从两个数据表中查询的列名称。
第3~5行使用右外连接查询数据表,并通过别名设置数据表的连接条件。
第6行使用ORDER BY语句将查询的结果集按照编号进行升序排序。
3.全外连接查询
全外连接是指将左表中的所有数据分别与右表中的每条数据都进行连接组合。返回的结果集除了内连接的数据外,还有两个表中不符合条件的数据,并在左表或右表的相应列中添加NULL。下面通过实例讲解使用全外连接查询数据的实现方法。
【实例6-5】使用全外连接的查询方式将"职员信息"和"职务信息"数据表连接起来,使得能够从这两个数据表中查询数据信息。其具体实现如代码6.5所示。
代码6.5
- 01 SELECT a.编号,a.姓名,a.部门编号,
- 02 a.年龄,a.现住址,b.职务名称
- 03 FROM 职员信息 as a
- 04 FULL OUTER JOIN 职务信息 as b
- 05 ON a.职务编号 = b.职务编号
- 06 ORDER BY a.编号
【执行代码】代码执行以后,查询的数据结果如图6.5所示。
![]() |
图6.5 使用全外连接查询数据信息 |
【深入学习】关于上述代码的分析如下所示:
第1~2行指定从两个数据表中查询的列名称。
第3~5行使用全外连接查询数据表,并通过别名设置数据表的连接条件。
第6行使用ORDER BY语句将查询的结果集按照编号进行升序排序。
说明:左外连接、右外连接和全外连接之间的区别在于如何向返回不符合条件的数据列中添加NULL值。