SQL 基础教程
SQL 连接
SQL 高级教程
SQL 参考资料

SQL RIGHT JOIN 操作

在本教程中,您将学习如何使用 SQL 右连接从两个表中获取数据。

使用右连接

RIGHT JOINLEFT JOIN 完全相反。 它返回右表中的所有行以及左表中满足连接条件的行。

右连接是一种 outer join,因此也称为 右外连接。 外连接的其他变体是 left joinfull join。 下面的维恩图说明了右连接的工作原理。

SQL Right Join Illustration

注意: 外连接是在结果集中包含行的连接,即使被连接的两个表中的行之间可能不匹配。

为了清楚地理解这一点,让我们看看下面的 employeesdepartments 表。

+--------+--------------+------------+---------+
| emp_id | emp_name     | hire_date  | dept_id |
+--------+--------------+------------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |       4 |
|      2 | Tony Montana | 2002-07-15 |       1 |
|      3 | Sarah Connor | 2005-10-18 |       5 |
|      4 | Rick Deckard | 2007-01-03 |       3 |
|      5 | Martin Blank | 2008-06-24 |    NULL |
+--------+--------------+------------+---------+
 
+---------+------------------+
| dept_id | dept_name        |
+---------+------------------+
|       1 | Administration   |
|       2 | Customer Service |
|       3 | Finance          |
|       4 | Human Resources  |
|       5 | Sales            |
+---------+------------------+
表: employees 表: departments

现在,假设您要检索所有部门的名称以及在该部门工作的员工的详细信息。 但是,在实际情况下,可能有一些部门目前没有员工在工作。 好吧,让我们来了解一下。

以下语句通过使用通用 dept_id 字段将 employeesdepartments 表连接在一起,检索所有可用部门以及属于该部门的员工的 id、姓名、雇用日期。

SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1 RIGHT JOIN departments AS t2
ON t1.dept_id = t2.dept_id ORDER BY dept_name;

提示: 在联接查询中,左表是出现在 JOIN 子句中最左侧的表,而右表是出现在最右侧的表。

执行上述命令后,您将获得如下输出:

+--------+--------------+------------+------------------+
| emp_id | emp_name     | hire_date  | dept_name        |
+--------+--------------+------------+------------------+
|      2 | Tony Montana | 2002-07-15 | Administration   |
|   NULL | NULL         | NULL       | Customer Service |
|      4 | Rick Deckard | 2007-01-03 | Finance          |
|      1 | Ethan Hunt   | 2001-05-01 | Human Resources  |
|      3 | Sarah Connor | 2005-10-18 | Sales            |
+--------+--------------+------------+------------------+

右连接包括结果集中departments表中的所有行,无论employees表中的dept_id列是否匹配,即使没有,也可以清楚地看到部门"客户服务"包括在内 这个部门的员工。

注意:如果右表中有一行但左表没有匹配,则关联的结果行包含来自左表的所有列的 NULL 值。

Advertisements