首页 > 数据库 >MySQL内连接与外连接操作实例解析

MySQL内连接与外连接操作实例解析

来源:互联网 2026-05-27 19:43:01

关系型数据库中,多表数据需通过连接操作合并。内连接仅返回两表完全匹配的行,不匹配则丢弃。外连接分为左连接与右连接,会保留主表全部记录,缺失匹配时以空值填充。左连接以左表为主,右连接以右表为主,两者功能可通过交换表顺序相互转换。实践中常使用左连接以明确主表逻辑。

在关系型数据库中,数据通常分散在多个表中。要一次性获取完整信息,就需要将这些表按照特定规则“连接”起来。其核心机制是笛卡尔积:它会让表A的每一行与表B的每一行进行两两组合,生成一张巨大的临时表。然后,我们再通过连接条件,从这张大表中筛选出有意义的行。

内连接:只取匹配项

内连接是最常用的连接方式,规则明确:只返回两个表中完全满足连接条件的行。任何不匹配的行都会被直接丢弃。

长期稳定更新的攒劲资源: >>>点此立即查看<<<

在写法上,主要有两种:

  • 传统写法:在FROM子句中列出多个表,然后在WHERE子句中指定连接条件。常见的等值连接大多属于内连接。
  • 标准写法:使用INNER JOIN ... ON ...语法,这种写法语义更清晰,是目前推荐的方式。

内连接的特点是:结果集中绝不会因为不匹配而出现空值。它只呈现双方都“认可”的数据。

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

例如,查询员工及其所属的部门名称,内连接就只会显示有明确部门归属的员工。没有分配部门的员工,或没有任何员工的部门,都不会出现在结果里。

具体示例:显示员工“SMITH”的名字和他所在的部门名称。

MySQL内连接与外连接操作实例解析

MySQL内连接与外连接操作实例解析

外连接:保留一方所有记录

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

为了更好地说明,我们先看下预先创建的数据表结构:

MySQL内连接与外连接操作实例解析

左外连接

使用LEFT JOIN时,会完整显示左侧表的所有行。如果右表中没有匹配的行,对应的列就会显示为NULL

这种连接方式适用于以左表为主体的查询场景。比如,“列出所有学生,并显示他们的成绩”。即使某个学生从未参加过考试,他的个人信息也会被保留下来,只是成绩部分显示为空。

例子:查询所有学生的成绩,即使某个学生没有成绩,也要将其个人信息显示出来。

MySQL内连接与外连接操作实例解析

右外连接

使用RIGHT JOIN时,则会完整显示右侧表的所有行。如果左表中没有匹配的行,对应的列同样会用NULL填充。

这适用于以右表为主体的场景。例如,“列出所有成绩,并显示对应的学生信息”。如果某个成绩找不到对应的学生(可能学生记录已被删除),这条成绩记录依然会出现,只是学生信息部分为空。

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

MySQL内连接与外连接操作实例解析

左连接还是右连接?如何选择

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

例如,要实现“列出所有部门和员工,包括没有员工的部门”这个需求:

  • 可以写成:部门表 LEFT JOIN 员工表(此时左表是部门表,会被完整保留)。
  • 也可以写成:员工表 RIGHT JOIN 部门表(此时右表是部门表,同样被完整保留)。

在开发实践中,通常固定使用LEFT JOIN会让逻辑更清晰。只需要把想要全量保留的那个“主表”放在左边即可,这样更容易理解和维护。

核心要点总结

  • 内连接:结果集只包含匹配成功的行。两个表地位平等,没有主次之分。
  • 左外连接:以左表为主。左表的所有行一定会出现;右表有匹配就显示具体值,没有匹配就显示为空。
  • 右外连接:以右表为主。右表的所有行一定会出现;左表有匹配就显示具体值,没有匹配就显示为空。

如果用图形比喻,内连接就像是取两个圆的交集。而左外连接,则像是保留左边整个圆,右边只取与左边相交的部分,右边未相交的部分则留白处理。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

相关攻略

更多

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。