MySQL数据库表的内连接和外连接示例详解

 更新时间:2026年05月27日 08:31:24   作者:Halvmån  
这篇文章主要介绍了MySQL数据库表的内连接和外连接的相关资料,文中通过代码介绍的非常详细,包括左外连接和右外连接的概念、应用场景及语法写法,需要的朋友可以参考下

之前我们讲解MySQL的查询方法,今天我们来讲解一下内连接和外链接,话不多说,现在开始啦,对了,今天是五一的第一天,祝大家五一快乐!!

一、连接的本质

在关系型数据库中,数据往往分散在多个表中。为了在一次查询中获取完整的信息,就需要将这些表按照某种规则“连接”起来。连接的底层是笛卡尔积:即让表A的每一行和表B的每一行两两组合,形成一张巨大的临时表。然后,再通过连接条件从中筛选出真正有意义的行

二、内连接

内连接是最常用的连接方式,它只返回两个表中完全满足连接条件的行。不匹配的行会被直接丢弃。

  • 传统写法:在FROM中列出多个表,用WHERE子句指定连接条件。其实我们之前写的等值连接多数就是内连接。

  • 标准写法:使用INNER JOIN ... ON ...语法,语义更清晰。

特点:结果集中绝不会出现因不匹配而产生的空值

select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;

注:前面学习的都是内连接

例如查询员工及其部门名,只会显示有部门的员工;既没有部门的员工,也没有员工的部门,都不会出现

下面是一个样例

显示SMITH的名字和所在部门名称

三、外连接

外连接会保留某个表中的全部记录,即使它在另一张表中找不到匹配。缺失的字段用NULL填充。外连接分为左外连接和右外连接

为了更好的讲解知识点,下面是我们预先创建的database与tables;

1. 左外连接

使用LEFT JOIN,会完整显示左侧表的所有行,右表中无匹配的列置为NULL

典型场景:你需要以左表为主体来查看信息。比如“列出所有学生,并显示他们的成绩”。即使某个学生从未参加过考试,他的个人信息也要保留,成绩部分留空。

例子:查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来

2. 右外连接

使用RIGHT JOIN,会完整显示右侧表的所有行,左表无匹配的列置为NULL

典型场景:需要以右表为主体。比如“列出所有成绩,并显示对应的学生信息”。某个成绩如果找不到对应的学生(可能学生记录已被删除),成绩记录依然要呈现,学生信息为空。

例子:对stu表和exam表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要显示出来

四、如何选择左连接还是右连接

实际上,左连接和右连接在功能上可以互相转换,只需交换表的顺序。例如:

  • “列出所有部门和员工,包括没有员工的部门”
    可以写作:部门表 LEFT JOIN 员工表(左表是部门,完整保留)。
    也可以写作:员工表 RIGHT JOIN 部门表(右表是部门,完整保留)。

开发建议:通常固定使用LEFT JOIN会更好理解,把要全量保留的主表放在左边。

五、总结

  • 内连接:结果集只包含匹配成功的行,两表地位平等,无主次之分。

  • 左外连接:左表为主,左表所有行一定出现;右表有就显示,没有就为空。

  • 右外连接:右表为主,右表所有行一定出现;左表有就显示,没有就为空。

如果把内连接想象成两个圆取交集,那么左外连接就像是保留左边整个圆,右边只取与左边相交的部分,未相交的右半部分留白

到此这篇关于MySQL数据库表的内连接和外连接的文章就介绍到这了,更多相关MySQL表内连和外连内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL最新版8.1.0版本部署和新特性详解

    MySQL最新版8.1.0版本部署和新特性详解

    MySQL8.1的应该来说是8.0版本的bug修复,这是 MySQL 变更发版模型后的第一个创新版本,本文给大家介绍了MySQL最新版8.1.0版本部署和新特性,需要的朋友可以参考下
    2023-11-11
  • 详解MySQL中Order By排序和filesort排序的原理及实现

    详解MySQL中Order By排序和filesort排序的原理及实现

    这篇文章主要为大家详细介绍了MySQL的Order By排序的底层原理与filesort排序,以及排序优化手段,文中的示例代码讲解详细,感兴趣的小编可以跟随小编一起学习一下
    2022-08-08
  • mysql数据库入门第一步之创建表

    mysql数据库入门第一步之创建表

    关于mysql介绍网上一搜一大堆,这里就不再介绍了,我之后的mysql文章只讲最简单基础的用法,主要是为java程序服务的.文中有非常详细的图文示例,需要的朋友可以参考下
    2021-05-05
  • Linux下mysql 8.0安装教程

    Linux下mysql 8.0安装教程

    这篇文章主要为大家详细介绍了Linux下mysql 8.0安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • mysql制作外键出现duplicate key name错误问题及解决

    mysql制作外键出现duplicate key name错误问题及解决

    这篇文章主要介绍了mysql制作外键出现duplicate key name错误问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • SQL ALTER TABLE语句灵活修改表结构和数据类型

    SQL ALTER TABLE语句灵活修改表结构和数据类型

    这篇文章主要介绍了SQL ALTER TABLE语句灵活修改表结构和数据类型,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • SQL数据处理之增删改实现方式

    SQL数据处理之增删改实现方式

    本文介绍了SQL中INSERT、UPDATE和DELETE语句的使用方法,包括如何批量添加、修改和删除数据,强调了在插入数据时需要注意字段长度,以及DML操作默认自动提交数据,最后提到可以通过设置autocommit为FALSE来控制提交行为
    2026-05-05
  • mysql百万数据表加索引优化的方法

    mysql百万数据表加索引优化的方法

    在大数据时代,随着数据量的快速增长,对数据库的索引优化变得尤为重要,本文主要介绍了mysql百万数据表加索引优化的方法,感兴趣的可以了解一下
    2024-02-02
  • MySQL中的引号和反引号的区别与用法详解

    MySQL中的引号和反引号的区别与用法详解

    这个问题是我在学习数据库的时候遇到的一个问题,我当时并不能理解下图中的一些情况,后来我也请教了一位大佬给我解答,最后在大佬和度娘的帮助下我大概理解了这个反引号的东西
    2021-10-10
  • MySQL如何对数据进行排序图文详解

    MySQL如何对数据进行排序图文详解

    我们知道从MySQL表中使用SQL SELECT语句来读取数据,下面这篇文章主要给大家介绍了关于MySQL如何对数据进行排序的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-08-08

最新评论