LEFT JOIN(也称为 LEFT OUTER JOIN)是一种 SQL 操作,用于结合两个或多个表中的行,即使右表中没有匹配的行。如果右表中没有匹配的行,则结果集中的右表部分将显示为 NULL。
SQL LEFT JOIN 语法
基本的 LEFT JOIN 语法如下:
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
这里的 column_name(s) 是你想要从连接的表中选择的列,table1 是左表,table2 是右表,table1.column_name 和 table2.column_name 是两个表中用于连接的共同列。
使用示例
继续使用前面的例子,假设我们想要获取所有员工的列表,包括那些没有分配到任何部门的员工。我们可以使用 LEFT JOIN 来实现这一点:
SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id;
结果:
| name | department_name |
|---|---|
| John Doe | Sales |
| Jane Smith | Marketing |
| Bob Johnson | Sales |
| Alice Johnson | NULL |
在这个查询中,即使某些员工没有分配到部门(即 department_id 在 departments 表中不存在),他们仍然会出现在结果集中,而他们的 department_name 将显示为 NULL。
另一个示例
假设我们有两个表:orders 和 customers。orders 表包含订单信息,customers 表包含客户信息。两个表通过 customer_id 列相关联。
orders 表:
| order_id | order_date | customer_id |
|---|---|---|
| 1 | 2021-01-01 | 1 |
| 2 | 2021-01-02 | 2 |
| 3 | 2021-01-03 | NULL |
customers 表:
| customer_id | customer_name |
|---|---|
| 1 | John Doe |
| 2 | Jane Smith |
如果我们想要获取所有订单的列表,包括那些没有客户信息的订单(可能是新客户还未被添加到 customers 表中),我们可以使用 LEFT JOIN:
SELECT orders.order_id, orders.order_date, customers.customer_name
FROM orders
LEFT JOIN customers
ON orders.customer_id = customers.customer_id;
结果:
| order_id | order_date | customer_name |
|---|---|---|
| 1 | 2021-01-01 | John Doe |
| 2 | 2021-01-02 | Jane Smith |
| 3 | 2021-01-03 | NULL |