
🔥承渊政道: 个人主页
❄️个人专栏: 《C语言基础语法知识》 《数据结构与算法》 《C++知识内容》 《Linux系统知识》 《算法刷题指南》 《测评文章活动推广》 《大模型语言路线学习》 《MySQL数据库学习》
✨逆境不吐心中苦,顺境不忘来时路!✨ 🎬 博主简介:

在 MySQL 的日常开发中,多表查询是一个非常常见的场景.随着业务数据不断拆分到不同的数据表中,我们往往需要通过表与表之间的关联关系,将分散的数据重新组合起来,得到更完整、更有价值的查询结果.而表连接,正是实现多表关联查询的核心方式.在学习 MySQL 表连接时,很多同学一开始会对内连接、左连接、右连接、外连接等概念感到混淆:它们到底有什么区别?查询结果为什么有时会多出一些
NULL?什么时候应该使用INNER JOIN,什么时候又该选择LEFT JOIN?这些问题如果没有理解清楚,在实际编写 SQL 时就很容易出现数据遗漏或结果不符合预期的情况.本文将围绕 MySQL 表的内外连接展开讲解,从连接的基本概念入手,结合具体示例分析不同连接方式的使用场景和查询结果,帮助大家更清晰地理解多表查询的执行逻辑.掌握表连接之后,我们就能更加灵活地处理复杂的数据关联问题,为后续学习子查询、索引优化以及 SQL 性能调优打下扎实基础.废话不多说,下面跟着小编的节奏🎵一起去疯狂的学习吧!

目录
1.表的内连和外连(重点)
在 MySQL 中,表连接用于把两张或多张表中的数据按照某个关联条件组合起来.实际开发中,数据通常会被拆分到不同的数据表中,例如用户信息存放在用户表,订单信息存放在订单表.如果想查询用户及其订单信息,就需要使用表连接.
表连接主要可以分为两大类:内连接和外连接.
2.内连接
内连接,也叫 INNER JOIN,用于查询两张表中满足连接条件的数据.
也就是说,只有两张表中能够匹配上的记录,才会出现在查询结果中.如果某条数据在另一张表中找不到对应记录,那么这条数据就不会被查询出来.
语法格式如下:
bash
SELECT 字段名
FROM 表1
INNER JOIN 表2
ON 表1.关联字段 = 表2.关联字段;
例如有两张表:
用户表 users:
text
id name
1 张三
2 李四
3 王五
订单表 orders:
text
id user_id product
1 1 手机
2 2 电脑
如果使用内连接:
sql
SELECT users.name, orders.product
FROM users
INNER JOIN orders
ON users.id = orders.user_id;
查询结果为:
text
name product
张三 手机
李四 电脑
因为 王五 在订单表中没有对应的订单数据,所以不会出现在结果中.
案例:显示SMITH的名字和部门名称

3.外连接
外连接用于查询两张表中满足条件的数据,同时还可以保留某一张表中没有匹配成功的数据.
外连接常见的有:
text
LEFT JOIN 左外连接
RIGHT JOIN 右外连接
在 MySQL 中,常用的是 LEFT JOIN 和 RIGHT JOIN.
3.1左外连接
左外连接,也叫 LEFT JOIN,会返回左表中的所有数据,以及右表中满足条件的数据.
如果左表中的某条记录在右表中没有匹配数据,那么右表对应的字段会显示为 NULL.
语法格式如下:
sql
SELECT 字段名
FROM 表1
LEFT JOIN 表2
ON 表1.关联字段 = 表2.关联字段;
例如:
sql
SELECT users.name, orders.product
FROM users
LEFT JOIN orders
ON users.id = orders.user_id;
查询结果为:
text
name product
张三 手机
李四 电脑
王五 NULL
因为 LEFT JOIN 会保留左表 users 中的所有数据,所以即使 王五 没有订单,也会被查询出来,只是订单字段显示为 NULL.
案例:建两张表(学生表,成绩表)


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

3.2右外连接
右外连接,也叫 RIGHT JOIN,会返回右表中的所有数据,以及左表中满足条件的数据.
如果右表中的某条记录在左表中没有匹配数据,那么左表对应的字段会显示为 NULL.
语法格式如下:
sql
SELECT 字段名
FROM 表1
RIGHT JOIN 表2
ON 表1.关联字段 = 表2.关联字段;
例如:
sql
SELECT users.name, orders.product
FROM users
RIGHT JOIN orders
ON users.id = orders.user_id;
这个查询会以右表 orders 为主,保留订单表中的所有数据.
对stu表和exam表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要显示出来.

4.内连接和外连接的区别
内连接只返回两张表中能够匹配成功的数据;外连接除了返回匹配成功的数据之外,还会保留某一张表中没有匹配成功的数据.
简单理解:
text
INNER JOIN:只要两边都匹配的数据
LEFT JOIN:左表数据全部保留,右表匹配不到显示 NULL
RIGHT JOIN:右表数据全部保留,左表匹配不到显示 NULL
在实际开发中,INNER JOIN 适合查询两张表中确实存在关联关系的数据;LEFT JOIN 适合以某一张主表为基础,即使没有关联数据也要展示出来的场景.例如查询所有用户及其订单时,即使某些用户没有订单,也希望显示这些用户,就可以使用 LEFT JOIN.
5.实战OJ
5.1分数排名

sql
SELECT
score,
DENSE_RANK() OVER (ORDER BY score DESC) AS `rank`
FROM Scores
ORDER BY score DESC;





5.2换座位

sql
SELECT
CASE
WHEN id % 2 = 1 AND id = (SELECT MAX(id) FROM Seat) THEN id
WHEN id % 2 = 1 THEN id + 1
ELSE id - 1
END AS id,
student
FROM Seat
ORDER BY id;





🚀真正的勇者不是流泪的人,而是含泪奔跑的人!
敬请期待下一篇文章内容
每日心灵鸡汤: 把日子过成自己的光!
不是每一天都要闪闪发亮,偶尔疲惫、迷茫、走得慢一点,也没有关系.
人生最重要的不是一直赢,而是在低谷时仍然愿意相信自己,在平凡的日子里继续认真生活.你不必急着成为别人眼中的优秀,只要一步一步,把自己照顾好,把今天过好,就已经很了不起.愿你心里有光,脚下有路,眼前有希望.
