左连接和内连接有什么区别?

左连接(LEFT JOIN,也叫左外连接)和内连接(INNER JOIN)是 SQL 中两种常用的连接方式,核心区别在于对“不匹配数据”的处理逻辑,具体差异如下:

1. 定义与核心逻辑

  • 内连接(INNER JOIN):只保留左右两张表中“匹配成功”的行。即:只有当连接条件(ON 后的条件)在左右表中同时满足时,才会被包含在结果集中。不匹配的行(左表有右表没有,或右表有左表没有)会被完全过滤掉。

  • 左连接(LEFT JOIN):保留左表的所有行,以及右表中与左表“匹配成功”的行。即:左表的每一行都会出现在结果中,无论是否在右表中找到匹配;如果右表中没有匹配,右表的列会用 NULL 填充。

2. 结果集范围

  • 内连接的结果集是左右表匹配行的交集。
  • 左连接的结果集是左表的全部行 + 右表与左表匹配的行(可理解为左表“驱动”结果集,右表仅补充匹配数据)。

3. 示例对比

假设有以下两张表:

  • 左表 students(学生):
id name
1 张三
2 李四
3 王五
  • 右表 scores(成绩):
id stu_id score
101 1 90
102 2 85
103 4 70

内连接(INNER JOIN)

 SELECT s.name, sc.scoreFROM students sINNERJOIN scores sc ON s.id = sc.stu_id; 

结果(仅保留匹配的行):

name score
张三 90
李四 85

左连接(LEFT JOIN)

 SELECT s.name, sc.scoreFROM students sLEFTJOIN scores sc ON s.id = sc.stu_id; 

结果(保留左表所有行,右表不匹配则为 NULL):

name score
张三 90
李四 85
王五 NULL

4. 关键区别总结

维度 内连接(INNER JOIN) 左连接(LEFT JOIN)
保留的数据 仅左右表匹配的行 左表所有行 + 右表匹配的行
不匹配的行处理 完全过滤 左表不匹配行保留,右表列填 NULL
结果集大小 ≤ 左右表中行数较少的一方 ≥ 左表的行数(可能因右表多匹配而增加)
适用场景 需严格匹配的数据(如“有成绩的学生”) 需保留左表全部数据(如“所有学生及成绩”)

简单说:内连接是“取交集”,左连接是“左表全要,右表取匹配”。选择哪种连接,取决于业务是否需要保留左表中未匹配的数据。

本文使用 文章同步助手 同步

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容