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

相关推荐
小江的记录本1 分钟前
【MyBatis-Plus】MyBatis-Plus的核心特性、条件构造器、分页插件、乐观锁插件
java·前端·spring boot·后端·sql·tomcat·mybatis
2401_894241923 分钟前
机器学习与人工智能
jvm·数据库·python
GentleDevin18 分钟前
Redis服务常用命令
数据库·oracle
難釋懷23 分钟前
Redis分片集群手动故障转移
数据库·redis·缓存
无名-CODING29 分钟前
从零开始!Vue3+SpringBoot前后端分离项目Docker部署实战(上):环境搭建与数据库容器化
数据库·spring boot·docker
Bdygsl42 分钟前
MySQL(2)—— CRUD
数据库·mysql
chushiyunen1 小时前
python edge-tts实现tts文本转语音、音频
数据库·python·音视频
原来是猿1 小时前
MySQL【事务中 - 事务的隔离级别】
数据库·mysql
2501_945423541 小时前
游戏与图形界面(GUI)
jvm·数据库·python
大傻^1 小时前
Spring AI Alibaba Agent开发:基于ChatClient的智能体构建模式
java·数据库·人工智能·后端·spring·springaialibaba