RIGHT JOIN(也称为 RIGHT OUTER JOIN)是一种 SQL 操作,用于结合两个或多个表中的行,即使左表中没有匹配的行。如果左表中没有匹配的行,则结果集中的左表部分将显示为 NULL。
SQL RIGHT JOIN 语法
基本的 RIGHT JOIN 语法如下:
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
这里的 column_name(s) 是你想要从连接的表中选择的列,table1 是左表,table2 是右表,table1.column_name 和 table2.column_name 是两个表中用于连接的共同列。
使用示例
假设我们有两个表:employees 和 departments。employees 表包含员工信息,departments 表包含部门信息。两个表通过 department_id 列相关联。
employees 表:
| employee_id | name | department_id |
|---|---|---|
| 1 | John Doe | 1 |
| 2 | Jane Smith | 2 |
| 3 | Bob Johnson | 1 |
departments 表:
| department_id | department_name |
|---|---|
| 1 | Sales |
| 2 | Marketing |
| 3 | IT |
如果你想获取每个部门及其所有员工的列表,包括那些没有员工的部门,你可以使用 RIGHT JOIN 如下:
SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.department_id;
结果:
| name | department_name |
|---|---|
| John Doe | Sales |
| Jane Smith | Marketing |
| Bob Johnson | Sales |
| NULL | IT |
这个查询将返回所有部门及其对应的员工名称,只有在 employees 表和 departments 表中都有匹配的 department_id 时才会返回结果。如果某个部门没有员工(即 department_id 在 employees 表中不存在),那么这个部门将出现在结果集中,而其 name 将显示为 NULL。
另一个示例
假设我们有两个表:customers 和 orders。customers 表包含客户信息,orders 表包含订单信息。两个表通过 customer_id 列相关联。
customers 表:
| customer_id | customer_name |
|---|---|
| 1 | John Doe |
| 2 | Jane Smith |
| 3 | Alice Johnson |
orders 表:
| order_id | order_date | customer_id |
|---|---|---|
| 1 | 2021-01-01 | 1 |
| 2 | 2021-01-02 | 2 |
| 3 | 2021-01-03 | NULL |
如果我们想要获取所有客户的列表,包括那些没有订单的客户,我们可以使用 RIGHT JOIN:
SELECT customers.customer_name, orders.order_date
FROM customers
RIGHT JOIN orders
ON customers.customer_id = orders.customer_id;
结果:
| customer_name | order_date |
|---|---|
| John Doe | 2021-01-01 |
| Jane Smith | 2021-01-02 |
| Alice Johnson | NULL |