当前位置: 首页 > article >正文

SQL 中 INNER JOIN 和 LEFT JOIN 的区别和用法

在数据库语言 SQL 中,连接 (也称进行表结合操作)是一种常见的操作,用于将多个数据表格核实关联进行查询。常见的连接类型中, INNER JOINLEFT JOIN 是最基本且最常用的。下面将给出完整的区别和用法说明。

1. 基本概念

INNER JOIN (内连接)
  • 功能:仅保留在 两个表格中均存在相关记录 的数据。如果在其中一个表格中找不到匹配的记录,该记录就会被排除。

LEFT JOIN (左连接)
  • 功能:保留 左边表格中所有记录,并为其在右边表格中匹配到的相关记录显示相关数据。如果在右边表格中找不到匹配记录,则显示 NULL 值。

2. 数据表结构游览

假设我们有以下两个表:

表1: students (学生表)
idnamemajor
1AliceMath
2BobScience
3CarolMath
4DavidNULL
表2: scores (分数表)
student_idscore
190
285
470
595

在此中:

  • students 是左边表格,包含学生信息;

  • scores 是右边表格,包含学生的分数。

3. INNER JOIN 用法

代码示例:

SELECT students.id, students.name, scores.score
FROM students
INNER JOIN scores ON students.id = scores.student_id;

输出结果:

idnamescore
1Alice90
2Bob85
4David70

解释:

  • INNER JOIN 只将学生表和分数表中匹配到的记录进行连接。

  • 当 id = 3 (学生 Carol)在 scores 表中找不到相对应的分数记录时,该记录不会出现在结果集中。

  • id = 5 (分数表中外符学生)也不会出现。

4. LEFT JOIN 用法

代码示例:

SELECT students.id, students.name, scores.score
FROM students
LEFT JOIN scores ON students.id = scores.student_id;

输出结果:

idnamescore
1Alice90
2Bob85
3CarolNULL
4David70

解释:

  • LEFT JOIN 保留左边 students 表格中所有记录,包括在 scores 表中没有匹配的 Carol,该记录的分数显示为 NULL

  • id = 5 存在于 scores 表,但在 students 表中不存在,所以不会显示在结果中。


5. INNER JOIN 和 LEFT JOIN 区别总结

对比项INNER JOINLEFT JOIN
连接模式只保留两表中匹配的记录保留左边表所有记录,没有匹配显示 NULL
源数据需要字段匹配的记录为基础以左表的所有记录为基础
NULL 值处理不会有 NULL 值出现右边表不匹配时显示 NULL
常用场景实现类似于交集操作需保留左边表不受右表影响

6. 应用场景

  • INNER JOIN 用于仅仅查询两表其中都有相关记录的场景,如计算课程的平均分。

  • LEFT JOIN 适用于保留没有匹配记录的场景,如查询所有学生的课程分数,包括还没有进入分数表的学生。


http://www.kler.cn/a/444182.html

相关文章:

  • 2024年第50周ETF周报
  • maven离线模式引用依赖
  • 机器人变换关系
  • 【redis的使用、账号流程、游戏服Handler的反射调用】1.自增id 2.全局用户名这样子名字唯一 3.
  • lshw学习——简单介绍
  • Java字符串的|分隔符转List实现方案
  • LLM大语言模型私有化部署-使用Dify与Qwen2.5打造专属知识库
  • Linux学习——9_Ubuntu Linux操作系统
  • js逆向基础-hook调试
  • Guava 提供了集合操作 `List`、`Set` 和 `Map` 三个工具类
  • HarmonyOS 输入框组件:TextInput 和 TextArea 深度解析
  • Oracle RAC最佳实践-优化私网连接
  • kubeadm安装K8s高可用集群之集群初始化及master/node节点加入calico网络插件安装
  • 系列1:基于Centos-8.6部署Kubernetes (1.24-1.30)
  • 深入浅出Flink CEP丨如何通过Flink SQL作业动态更新Flink CEP作业
  • git stash 的文件如何找回
  • 数据结构--插入排序
  • JAVA开发时获取用户信息失败,分析后端日志信息
  • spring @Mapper Converter转换泛型异常
  • Kafka Streams 在监控场景的应用与实践