外连接查询

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值。

在SQL中,若需要获取包含表所有记录的连接结果,可以使用外连接(LEFT OUTER JOIN 或简称为 LEFT JOIN)。外连接会返回表中的所有记录,即使右表中没有匹配的行,也会在结果中显示为 NULL 值。 ### 外连接语法 ```sql SELECT 字段列表 FROM 表 LEFT [OUTER] JOIN 右表 ON 表.字段 = 右表.字段 [WHERE 筛选条件]; ``` 其中,`LEFT OUTER JOIN` 中的 `OUTER` 是可选的,可以省略为 `LEFT JOIN`。`ON` 子句用于指定两个表之间的关联条件。 ### 示例 假设存在两个表:`departments`(部门表)和 `employees`(员工表),其中 `departments` 包含字段 `department_id` 和 `department_name`,而 `employees` 包含字段 `employee_id`、`employee_name` 和 `department_id`。若需要查询所有部门及其对应的员工信息,包括那些没有员工的部门,可以使用以下查询: ```sql SELECT d.department_id, d.department_name, e.employee_id, e.employee_name FROM departments d LEFT JOIN employees e ON d.department_id = e.department_id; ``` 该查询将返回所有部门的信息,并显示对应的员工信息。如果某个部门没有员工,`employee_id` 和 `employee_name` 字段将为 NULL [^2]。 外连接的一个典型应用场景是查询某个表中存在而另一个表中不存在的记录。例如,查找没有员工的部门: ```sql SELECT d.department_id, d.department_name FROM departments d LEFT JOIN employees e ON d.department_id = e.department_id WHERE e.employee_id IS NULL; ``` 这个查询中,`WHERE e.employee_id IS NULL` 条件用于筛选出那些在 `employees` 表中没有匹配记录的部门 [^2]。 ### 相关问题 1. 如何使用右外连接查询右表中的所有记录? 2. 什么是SQL中的内连接,它的使用场景是什么? 3. 如何实现SQL中的全外连接? 4. UNION 和 UNION ALL 在SQL多表查询中有什么区别? 5. SQL99语法与SQL92语法在连接查询方面有哪些区别?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值