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 |