请解释 MySQL 中 INNER JOIN、LEFT JOIN 和 RIGHT JOIN 的差异,并说明各自适用的场景。
考察说明
考查对 SQL 连接类型语义的理解与应用场景判断。
回答思路
- 【回答框架 1】INNER JOIN 返回两表中匹配的行,未匹配的行被忽略;LEFT JOIN 返回左表全部行,右表无匹配时用 NULL 填充;RIGHT JOIN 反之。三者都基于 ON 条件进行匹配。
- 【回答框架 2】适用场景:内连接用于仅需要交集数据的查询,如订单与客户都存在才显示;左连接用于保留主表全部记录并附加关联信息,如统计所有用户及其订单数;右连接较少用,常可通过交换表顺序改写为左连接。
- 【回答框架 3】匹配规则上,如果 ON 条件不满足,外连接会保留一侧的 NULL 扩展行,内连接则直接过滤;多表连接时,连接顺序会影响结果,尤其是外连接需要关注数据遗漏。
- 【回答框架 4】性能上,MySQL 优化器可能重排连接顺序,但外连接因语义限制可能影响优化;应通过索引或小表驱动大表来提升效率。
- 【关键点 1】INNER JOIN 只返回匹配行,LEFT JOIN 保留左表全部,RIGHT JOIN 保留右表全部。
- 【关键点 2】外连接无匹配时以 NULL 补位,内连接不补位。
- 【关键点 3】RIGHT JOIN 多数情况下可改为 LEFT JOIN 并交换表。
- 【关键点 4】连接条件用 ON,过滤条件用 WHERE,否则外连接语义改变。
- 【关键点 5】多表连接时需注意外连接的顺序与结果集影响。
- 【易错点 1】将 ON 条件中的过滤误放 WHERE,导致外连接返回行数减少。
- 【易错点 2】混淆 LEFT JOIN 与 INNER JOIN 的结果,以为左表全部行总是保留。
- 【易错点 3】不经评估就使用 RIGHT JOIN,忽略其可替换性。