找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

152

积分

0

好友

20

主题
发表于 7 小时前 | 查看: 1| 回复: 0

SQL查询中,左连接(LEFT JOIN,也称为左外连接)和内连接(INNER JOIN)是两种广泛使用的连接方式。它们的主要区别在于如何处理不匹配的数据,下面我们将详细解析。

左连接与内连接对比示意图

定义与核心逻辑

  • 内连接(INNER JOIN):仅保留左右两张表中完全匹配的行。只有当连接条件(ON子句后的条件)在左右表中同时满足时,该行才会出现在结果集中。任何不匹配的行(无论是左表有而右表没有,还是右表有而左表没有)都会被过滤掉。
  • 左连接(LEFT JOIN):保留左表的所有行,同时包含右表中与左表匹配成功的行。如果右表中没有匹配项,则右表的列将用NULL值填充。

结果集范围

  • 内连接的结果集是左右表匹配行的交集,通常小于或等于左右表中行数较少的一方。
  • 左连接的结果集以左表为驱动,包含左表的全部行以及右表中匹配的行,因此结果集大小至少等于左表的行数。

示例对比

假设有以下两张表:

左表 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.score
FROM students s
INNER JOIN scores sc ON s.id = sc.stu_id;
结果(仅显示匹配的行): name score
张三 90
李四 85

左连接(LEFT JOIN)查询

SELECT s.name, sc.score
FROM students s
LEFT JOIN scores sc ON s.id = sc.stu_id;
结果(保留左表所有行,右表不匹配则显示NULL): name score
张三 90
李四 85
王五 NULL

关键区别总结

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

简单来说,内连接是“取交集”,而左连接是“左表全要,右表取匹配”。在实际应用中,选择哪种连接方式取决于业务需求,特别是是否需要保留左表中未匹配的数据。

您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区(YunPan.Plus) ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-1 14:55 , Processed in 1.088759 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

快速回复 返回顶部 返回列表