当前位置: 首页 > news >正文

【MySQL 数据库】内外连接

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


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

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

  • 员工信息存在emp
  • 部门信息存在dept
  • 学生信息存在stu表,成绩存在exam

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

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


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

1. 核心概念

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

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

2. 标准语法

sql

SELECT 字段名 FROM 表1 INNER JOIN 表2 ON 连接条件 AND 其他筛选条件;
  • INNER JOIN:内连接关键字
  • ON:写表与表之间的关联条件(必须有)
  • AND:额外的筛选条件

3. 实战案例

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

sql

-- 老式写法(等价内连接) 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):左边表全显示

核心概念
  • 左表完全显示
  • 右表只显示匹配上的数据
  • 匹配不上 → 右表字段补NULL
标准语法

sql

SELECT 字段名 FROM 表1(左表) LEFT JOIN 表2(右表) ON 连接条件;
实战案例

先建测试表:

sql

-- 学生表 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);

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

sql

SELECT * FROM stu LEFT JOIN exam ON stu.id = exam.id;

✅ 结果:

  • jack、tom:有成绩,正常显示
  • kity、nono:无成绩,成绩字段显示 NULL
  • 成绩表 11 号:不匹配学生,不显示

2. 右外连接(RIGHT JOIN):右边表全显示

核心概念
  • 右表完全显示
  • 左表只显示匹配上的数据
  • 匹配不上 → 左表字段补NULL
标准语法

sql

SELECT 字段名 FROM 表1 RIGHT JOIN 表2(右表) ON 连接条件;
实战案例

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

sql

SELECT * FROM stu RIGHT JOIN exam ON stu.id = exam.id;

✅ 结果:

  • 成绩 1、2、11 全部显示
  • 11 号成绩无匹配学生,学生字段补 NULL

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

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

两种等价写法:

sql

-- 方法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右表全部数据以右表为主,查全部 + 关联

简单记:

  • 要交集 → 内连接
  • 要某张表全量数据 → 左 / 右连接
  • 左连接 = 左边全显;右连接 = 右边全显

六、实战 OJ 推荐

学完直接练手:

  • LeetCode:178. Rank Scores(分数排名)178. 分数排名 - 力扣(LeetCode)
  • LeetCode:626. Exchange Seats(换座位)626. 换座位 - 力扣(LeetCode)
http://www.jsqmd.com/news/804505/

相关文章:

  • 生成式引擎优化(GEO):AI时代企业流量增长新范式,源头服务商赋能品牌长效增长# - 麒麟芯geo4008005528
  • 热门去水印软件实测对比 哪一款清理更彻底 - 爱上科技热点
  • 广州聚杰芯科交通流量调查系统,2026十大品牌优选,值得信赖的监测专家 - 品牌速递
  • 使用curl命令直接调试Taotoken大模型聊天接口的详细步骤
  • 哔咔漫画下载器完整指南:快速构建个人离线漫画库
  • Pandas高效数据处理:筛选特定行实例解析
  • 编程应届生面试,技术面必问的20个核心知识点,全在这里
  • GoDaddy域名批量管理利器gd-plug:命令行自动化实战指南
  • 手机上如何去除视频水印?多种方法一次性教 - 爱上科技热点
  • 不止点灯:用ZCU102的MIG控制器和VIO IP实时调试DDR4读写状态
  • 企业AI智能体生产级落地:架构、技术栈与工程实践全解析
  • 微信里哪个小程序免费去水印?2026最新安全无套路推荐 - 爱上科技热点
  • Mac Mouse Fix:如何彻底改变macOS鼠标体验的5个关键技术
  • 构建AI长期记忆系统:突破上下文窗口限制的架构与实现
  • a16z 领投,前 Deepmind 研究员创立 Ethos:基于语音智能体的人才匹配平台;印度成为 Wispr Flow 第二大市场丨日报
  • 大模型 Agent 面试高频100题——基础篇
  • 编程统计企业水电物业日常开销数据,分析资源浪费时段,制定节能方案,降低公司固定运营成本。
  • 机器学习模型优化:从梯度下降到Adam,超越调参的本质理解
  • 使用Taotoken后API调用延迟与稳定性实际观测体验
  • 对话式AI编程助手JotBot:本地优先的代码生成与重构实践
  • 有没有完全免费的去水印工具?免费去水印工具无需付费 2026 实测推荐 - 爱上科技热点
  • MIUI 12 下 Google Play 登录“卡核对”?一个权限与重启的破局思路
  • 欧盟AI战略:从监管框架到技术主权的欧洲路径
  • 私域电商直播怎么做?500+品牌都在用的增长秘籍
  • 大模型长文本处理范式革命(Claude 2026推理引擎内核首次公开)
  • 如何打破语言壁垒:XUnity自动翻译器终极指南
  • 基于React与Tailwind CSS的轻量级ChatGPT Web界面部署与定制指南
  • 在 Taotoken 平台观测不同模型调用延迟与成功率的心得
  • 本地推荐:优质激光切管机厂家及选型要点全解析 - GrowthUME
  • 国家级数据仓库构建:从爬取到应用的全流程实践指南