it编程 > 数据库 > Mysql

一文带你彻底搞懂MySQL数据库中的内外连接

91人参与 2026-05-14 Mysql

在 mysql 多表查询中,表连接是最核心、最常用的知识点,不管是业务开发还是面试,都是高频考点。这篇博客我用最通俗的语言,带你彻底搞懂内连接、左外连接、右外连接,看完直接上手写 sql。

一、先搞懂:为什么需要表连接?

实际业务里,数据不会只存在一张表中。比如:

同时查员工 + 部门、学生 + 成绩,就必须用表连接,把多张表按关联字段拼起来查询。

表连接本质:把多张表按关联条件组合,返回符合要求的结果集

二、内连接(inner join):只保留匹配的数据

1. 核心概念

内连接 = 取两张表的交集只返回两张表能匹配上的数据,匹配不上的直接丢弃

我们平时写的 from 表1,表2 where 条件,本质就是内连接。

2. 标准语法

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

3. 实战案例

需求:查询员工 smith 的名字和所属部门名称。

-- 老式写法(等价内连接)
select ename, dname 
from emp, dept 
where emp.deptno = dept.deptno 
and ename = 'smith';

-- 标准内连接写法(推荐)
select ename, dname 
from emp 
inner join dept 
on emp.deptno = dept.deptno 
and ename = 'smith';

结果:只返回 smith 及其对应部门,无匹配的数据不会出现。

三、外连接:保留 “不匹配” 的数据

外连接和内连接最大区别:会保留某张表的全部数据,即使另一张表没有匹配项,也会显示,补 null。

外连接分两种:左外连接(left join)、右外连接(right join)

1. 左外连接(left join):左边表全显示

核心概念

标准语法

select 字段名 
from 表1(左表)
left join 表2(右表)
on 连接条件;

实战案例

先建测试表:

-- 学生表
create table stu (id int, name varchar(30));
insert into stu values(1,'jack'),(2,'tom'),(3,'kity'),(4,'nono');

-- 成绩表
create table exam (id int, grade int);
insert into exam values(1, 56),(2,76),(11, 8);

需求:查询所有学生的成绩,没成绩的学生也要显示

select * 
from stu 
left join exam 
on stu.id = exam.id;

结果:

2. 右外连接(right join):右边表全显示

核心概念

标准语法

select 字段名 
from 表1
right join 表2(右表)
on 连接条件;

实战案例

需求:显示所有成绩,哪怕没有学生对应也要显示

select * 
from stu 
right join exam 
on stu.id = exam.id;

结果:

四、高频练习:部门 + 员工(经典面试题)

需求:列出所有部门名称 + 员工信息,包括没有员工的部门

两种等价写法:

-- 方法1:部门左连接员工(推荐)
select d.dname, e.* 
from dept d 
left join emp e 
on d.deptno = e.deptno;

-- 方法2:员工右连接部门
select d.dname, e.* 
from emp e 
right join dept d 
on d.deptno = e.deptno;

效果:所有部门都显示,没员工的部门,员工字段为 null。

五、一张图总结:内连接 vs 左 / 右连接

表格

连接类型关键字保留数据适用场景
内连接inner join两张表的交集只查匹配数据
左外连接left join左表全部数据以左表为主,查全部 + 关联
右外连接right join右表全部数据以右表为主,查全部 + 关联

简单记:

到此这篇关于一文带你彻底搞懂mysql数据库中的内外连接的文章就介绍到这了,更多相关mysql数据库内外连接内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

您想发表意见!!点此发布评论

推荐阅读

iframe跨域地址代理方式(nginx配置)

05-14

MySQL实现优雅统计工作日(周一至周五)数据

05-13

MySQL数据库自带系统数据库功能超详细介绍

05-15

一文彻底吃透MySQL DDL操作之数据库、数据表、字段全解析

05-15

MySQL8.0设置连接超时及登录失败锁定问题及解决

05-12

远程连接服务器mysql,连接失败问题及解决

05-12

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论