LEFT JOIN保留左表所有记录,右表无匹配时字段为NULL;适用于查询用户及部门信息(含未分配部门的用户),统计登录时间或检查外键缺失,通过WHERE IS NULL可找出无关联记录的数据。
在 MySQL 中,LEFT JOIN(左连接)用于从左表(主表)中返回所有记录,即使右表中没有匹配的记录。如果右表中没有匹配项,结果中对应字段会显示为 NULL。
语法结构
SELECT 列名 FROM 左表 LEFT JOIN 右表 ON 条件;
- 左表:主表,所有数据都会被保留。
- ON:指定两张表之间的关联条件,通常是外键关系。
例如,有两个表:
- users(用户表):id, name, department_id
- departments(部门表):id, dept_name
你想查出所有用户及其对应的部门名称,包括那些没有分配部门的用户。
使用示例
SELECT users.name, departments.dept_name FROM users LEFT JOIN departments ON users.department_id = departments.id;
结果会包含:
- 所有用户的姓名
- 有部门的用户显示部门名
- 没有部门的用户对应 dept_name 为 NULL
适用场景
LEFT JOIN 常用于以下情况:
- 统计每个用户最近一次登录时间(即使从未登录)
- 列出所有订单及客户信息,包括未下单的客户(反过来用 RIGHT JOIN 或调整表顺序)
- 检查外键缺失的数据,比如找出哪些用户指向了不存在的部门
注意:如果只想看“没部门”的用户,可以在后面加 WHERE 过滤:
WHERE departments.id IS NULL
这能帮你找出数据不一致或缺失引用的情况。
基本上就这些。LEFT JOIN 的关键是记住“左表全保留”,配合 ON 条件灵活使用就行。