LEFT JOIN 返回左表全部记录及右表匹配记录,不匹配则右表字段为 NULL;语法为 SELECT ... FROM 左表 LEFT JOIN 右表 ON 条件;WHERE 过滤右表字段会丢失左表无匹配行。

左连接(LEFT JOIN)在 MySQL 中用于查询左表的全部记录,以及右表中与左表匹配的记录;如果右表没有匹配项,则对应字段显示为 NULL。
LEFT JOIN 基本语法
LEFT JOIN 必须配合 ON 子句指定关联条件,不能省略:
SELECT 字段列表 FROM 左表 LEFT JOIN 右表 ON 关联条件;
注意:LEFT JOIN 也可写作 LEFT OUTER JOIN,效果完全相同,“OUTER”可省略。
LEFT JOIN 的核心逻辑
- 以左表为基准,逐行扫描每一条记录
- 对每一行,在右表中查找满足 ON 条件的记录
- 找到则拼接成一行结果;找不到则右表对应列填 NULL
- 最终结果行数 ≥ 左表行数(不会少于左表)
常见使用场景与示例
例如有两张表:users(用户ID、姓名) 和 orders(订单ID、用户ID、金额),想查所有用户及其订单信息(包括从未下单的用户):
SELECT u.name, o.amount FROM users u LEFT JOIN orders o ON u.id = o.user_id;
结果中,没下过单的用户对应 amount 列为 NULL,但姓名仍会显示。
注意事项与易错点
- WHERE 条件写在 JOIN 后可能“变相转为 INNER JOIN”:若在 WHERE 中过滤右表字段(如 WHERE o.amount > 100),会把右表为 NULL 的行剔除,失去左连接意义。应改用 ON 条件或 IS NULL 判断
- ON 条件只能引用参与 JOIN 的表,不能出现 SELECT 中未 JOIN 的表
- 多个 LEFT JOIN 连续使用时,后一个 JOIN 的“左表”是前一个 JOIN 的结果集(含临时生成的 NULL 行)










