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 更像"保底"。

相关推荐
星星也在雾里9 小时前
PgBouncer 解决 PostgreSQL 连接数超限 + 可视化监控
数据库·postgresql
雨辰AI10 小时前
SpringBoot3 + 人大金仓读写分离 + 分库分表 + 集群高可用 全栈实战
java·数据库·mysql·政务
长城202410 小时前
关于MySql的ONLY_FULL_GROUP_BY问题
数据库·mysql·聚合列
常常有11 小时前
MySQL 底层执行原理:输入SQL语句到两阶段提交
数据库·sql·mysql
Mr. zhihao11 小时前
深入解析redis基本数据结构
数据结构·数据库·redis
m0_7488394911 小时前
利用天正暖通CAD快速掌握风管数量统计的方法
数据库
随身数智备忘录11 小时前
什么是设备管理体系?设备管理体系包含哪些核心模块?
网络·数据库·人工智能
海市公约12 小时前
MySQL更新语句执行全流程:从Buffer Pool修改到二阶段提交
数据库·mysql·binlog·innodb·undo log·二阶段提交·update执行原理
颂love12 小时前
MySQL的执行流程
android·数据库·mysql
海市公约13 小时前
一条SQL查询的完整旅程:MySQL执行流程深度解析
sql·mysql·数据库优化·执行计划·连接器·查询缓存·sql执行原理