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

相关推荐
钮钴禄·爱因斯晨3 分钟前
【探索实战】KuratorGitOps 多环境配置管理与合规审计
数据库
Z***G47913 分钟前
【零基础学Mysql】常用函数讲解,提升数据操作效率的利器
数据库·mysql
q***064721 分钟前
Spring Boot 从 2.7.x 升级到 3.3注意事项
数据库·hive·spring boot
aml258__28 分钟前
MySQL 数据库管理入门:从创建到删除(T1)
数据库·mysql·oracle·初学数据库
悦悦欧呐呐呐呐33 分钟前
数据库事务是什么,怎么用的
服务器·数据库·oracle
q***649741 分钟前
Spring Boot 各种事务操作实战(自动回滚、手动回滚、部分回滚)
java·数据库·spring boot
忘记9261 小时前
mybatis是什么
数据库·oracle·mybatis
q***92511 小时前
Springboot3 Mybatis-plus 3.5.9
数据库·oracle·mybatis
q***47431 小时前
PostgreSQL 中进行数据导入和导出
大数据·数据库·postgresql
TDengine (老段)2 小时前
MySQL/PG/TDengine 时间范围 SQL 表达式
sql·mysql·tdengine