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。

  1. 适用场景不同

INNER JOIN:适合查询有明确匹配关系的数据,比如"哪些用户下过订单"。

LEFT JOIN:适合做"全量统计",比如"所有用户及其订单数"。

  1. 面试陷阱

面试官可能会问: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。

  1. 问:什么时候用 INNER JOIN,什么时候用 LEFT JOIN?

答:

INNER JOIN:需要交集数据。

LEFT JOIN:需要保留左表全量数据。

  1. 问:如何用 LEFT JOIN 模拟 INNER JOIN?

答:在 WHERE 子句中过滤掉右表字段为 NULL 的情况即可。

六、总结

INNER JOIN:交集查询,结果集更小,常用于匹配关系。

LEFT JOIN:保留左表数据,常用于全量统计和缺失数据分析。

面试时不仅要会写语法,更要能解释 执行结果的差异 和 适用场景。

一句话总结:

INNER JOIN 更像"筛选",LEFT JOIN 更像"保底"。

相关推荐
一 乐5 小时前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
1.14(java)6 小时前
SQL数据库操作:从CRUD到高级查询
数据库
Full Stack Developme7 小时前
数据库索引的原理及类型和应用场景
数据库
IDC02_FEIYA8 小时前
SQL Server 2025数据库安装图文教程(附SQL Server2025数据库下载安装包)
数据库·windows
辞砚技术录9 小时前
MySQL面试题——联合索引
数据库·面试
萧曵 丶9 小时前
MySQL 主键不推荐使用 UUID 的深层原因
数据库·mysql·索引
小北方城市网9 小时前
分布式锁实战指南:从选型到落地,避开 90% 的坑
java·数据库·redis·分布式·python·缓存
毕设十刻9 小时前
基于Vue的人事管理系统67zzz(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
TDengine (老段)11 小时前
TDengine Python 连接器入门指南
大数据·数据库·python·物联网·时序数据库·tdengine·涛思数据
萧曵 丶12 小时前
事务ACID特性详解
数据库·事务·acid