LEFT JOIN
保留左表全部记录,同时带出右表匹配数据。
简介
LEFT JOIN 保留左表全部记录,并带出右表中满足 ON 条件的数据;没有匹配时,右表字段返回 NULL。若随后在 WHERE 中限制右表字段,未匹配行可能被过滤掉,使结果接近 INNER JOIN。需要保留未匹配行的右表条件通常应谨慎放在 ON 中。
基础语法
SELECT o.id, c.name FROM orders o LEFT JOIN customers c ON o.customer_id = c.id;
示例
LEFT JOIN 示例
保留全部 orders,并观察 customer_id 104 没有匹配客户时 name 返回 NULL。
示例数据表
表名:
orders| id | customer_id |
|---|---|
| 1 | 101 |
| 2 | 102 |
| 3 | 101 |
| 4 | 104 |
表名:
customers| id | name |
|---|---|
| 101 | Alice |
| 102 | Bob |
| 103 | Cindy |
运行结果
| id | name |
|---|---|
| 1 | Alice |
| 2 | Bob |
| 3 | Alice |
| 4 | NULL |
常见问题
LEFT JOIN 和 INNER JOIN 最大区别是什么?
LEFT JOIN 保留左表全部记录;INNER JOIN 只保留两边都匹配的记录。
为什么右表字段会出现 NULL?
说明左表记录没有匹配到右表记录,所以右表字段返回 NULL。
LEFT JOIN 后再写 WHERE 要注意什么?
如果在 WHERE 中筛选右表字段,可能会把未匹配记录过滤掉,效果接近 INNER JOIN。
标签
这篇内容是否清楚?
感谢反馈,我们会把它用于后续内容复核。