【MySQL数据库学习】(MySQL表的内外连接)


🔥承渊政道: 个人主页
❄️个人专栏: 《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 JOINRIGHT 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;

🚀真正的勇者不是流泪的人,而是含泪奔跑的人!


敬请期待下一篇文章内容


每日心灵鸡汤: 把日子过成自己的光!

不是每一天都要闪闪发亮,偶尔疲惫、迷茫、走得慢一点,也没有关系.
人生最重要的不是一直赢,而是在低谷时仍然愿意相信自己,在平凡的日子里继续认真生活.你不必急着成为别人眼中的优秀,只要一步一步,把自己照顾好,把今天过好,就已经很了不起.愿你心里有光,脚下有路,眼前有希望.

相关推荐
瀚高PG实验室1 小时前
db_ha集群中某个节点启动失败,报错缺少sm4加密模块
数据库·瀚高数据库·highgo
IvorySQL1 小时前
PostgreSQL 技术日报 (6月16日)|Neon 自动化再进一步,逻辑复制冲突日志迎来 v50 更新
数据库·postgresql·自动化
小小工匠1 小时前
Redis - 主从集群脑裂:数据丢失的隐藏杀手
数据库·redis
JAMSAN09301 小时前
机器人轴承:被低估的“物理关节”,正在打开300倍增长空间
数据库·人工智能·机器人·智能硬件
三品吉他手会点灯8 小时前
C语言学习笔记 - 50.流程控制4 - 流程控制为什么非常非常重要
c语言·开发语言·笔记·学习
计算机安禾10 小时前
【数据库系统原理】第19篇:计算机存储层次结构与数据库文件的物理组织
数据库·oracle
JAVA面经实录91710 小时前
操作系统面试题
java·服务器·数据库·计算机网络·面试
sunfdf11 小时前
知识学习场景下的智能应用实践大纲
学习
摇滚侠11 小时前
mariadb-libs 被 mysql-community-libs-5.7.28-1.el7.x86_64 取代
数据库·mysql·mariadb