SQL 面试高频:INNER JOIN vs LEFT JOIN 怎么考?
在 SQL 面试中,INNER JOIN 和 LEFT JOIN 是必考点。很多同学能写出语法,但在面试官的追问下,往往答不清楚二者的本质区别和应用场景。本文就帮你彻底理清这两个 JOIN 的考点。
一、INNER JOIN 是什么?
INNER JOIN:只返回两张表中满足匹配条件的数据。
特点:
● 如果某一方没有匹配记录,就不会出现在结果中。
● 结果集只包含“交集部分”。
举个例子:
假设有用户表和订单表,想查所有下过订单的用户,用 INNER JOIN 就能完成。
👉 面试常问:
如果某用户没有下单,是否会出现在 INNER JOIN 的结果里?
答案:不会。
二、LEFT JOIN 是什么?
LEFT JOIN:返回左表的全部数据,即使右表没有匹配记录,也会显示。右表没有匹配时,相关字段填充为 NULL。
特点:
● 保留“左表全部 + 右表匹配部分”。
● 没匹配的部分会补 NULL。
👉 面试常问:
如果想统计所有用户,即便没有订单,也要展示用户信息,应该用哪种 JOIN?
答案:LEFT JOIN。
三、INNER JOIN vs LEFT JOIN 的核心区别
1. 结果集不同
INNER JOIN:只保留两表的交集。
LEFT JOIN:保留左表所有数据,右表没有匹配时补 NULL。
2. 适用场景不同
INNER JOIN:适合查询有明确匹配关系的数据,比如“哪些用户下过订单”。
LEFT JOIN:适合做“全量统计”,比如“所有用户及其订单数”。
3. 面试陷阱
面试官可能会问:LEFT JOIN 能否替代 INNER JOIN?
答案:理论上可以(在 WHERE 条件中过滤掉右表为 NULL 的情况),但 INNER JOIN 更直观且效率更高。
四、性能对比
在多数数据库(如 MySQL)中:
INNER JOIN 通常比 LEFT JOIN 更快,因为数据量更小,只处理交集。
LEFT JOIN 可能会引入大量 NULL 值,结果集更大,查询速度慢一些。
👉 面试延伸:
为什么 INNER JOIN 更快?
答:因为优化器只处理匹配的行,避免了额外的 NULL 填充。
五、面试高频题目
1. 问:INNER JOIN 和 LEFT JOIN 的区别是什么?
答:INNER JOIN 只保留匹配的行,LEFT JOIN 保留左表全部,右表没匹配时补 NULL。
2. 问:什么时候用 INNER JOIN,什么时候用 LEFT JOIN?
答:
INNER JOIN:需要交集数据。
LEFT JOIN:需要保留左表全量数据。
3. 问:如何用 LEFT JOIN 模拟 INNER JOIN?
答:在 WHERE 子句中过滤掉右表字段为 NULL 的情况即可。
六、总结
INNER JOIN:交集查询,结果集更小,常用于匹配关系。
LEFT JOIN:保留左表数据,常用于全量统计和缺失数据分析。
面试时不仅要会写语法,更要能解释 执行结果的差异 和 适用场景。
一句话总结:
INNER JOIN 更像“筛选”,LEFT JOIN 更像“保底”。