MySQL 表连接:内连接与外连接 目录 1. 引言 2. 表连接概述 3. 内连接Inner Join3.1 什么是内连接3.2 案例显示 SMITH 的名字和部门名称➡️ 4. 左外连接Left Join4.1 什么是左外连接4.2 案例查询所有学生的成绩⬅️ 5. 右外连接Right Join5.1 什么是右外连接5.2 案例显示所有成绩及对应的学生️ 6. 综合练习 7. 实战 OJ 推荐 8. 总结❓ 9. 经典面试题 1. 引言在数据库查询中我们经常需要从多个表中获取数据。比如查询员工的名字和他所在的部门名称这些信息分别存储在EMP员工表和DEPT部门表中。这时就需要用到表的连接Join。表的连接是 SQL 查询的核心也是面试中的高频考点。本文将带你彻底搞懂内连接Inner Join和外连接Outer Join并通过丰富的案例和代码让你轻松掌握。 2. 表连接概述表的连接分为两种主要类型内连接Inner Join只返回两个表中匹配的行。外连接Outer Join返回一个表中的所有行即使另一个表中没有匹配的行。外连接又分为左外连接Left Join保留左表的所有数据。右外连接Right Join保留右表的所有数据。核心区别内连接只取交集外连接取并集并补上空值。 3. 内连接Inner Join3.1 什么是内连接内连接实际上就是利用WHERE子句对两种表形成的笛卡儿积进行筛选。我们前面学习的查询都是内连接也是在开发过程中使用的最多的连接查询。语法SELECT字段FROM表1INNERJOIN表2ON连接条件AND其他条件备注前面学习的FROM 表1, 表2 WHERE 条件这种写法本质上也是内连接。3.2 案例显示 SMITH 的名字和部门名称数据准备假设已有 EMP 和 DEPT 表EMP表包含员工信息ename,deptno等DEPT表包含部门信息dname,deptno等方法一使用传统的WHERE写法隐式内连接SELECTename,dnameFROMEMP,DEPTWHEREEMP.deptnoDEPT.deptnoANDenameSMITH;方法二使用标准的INNER JOIN写法显式内连接SELECTename,dnameFROMEMPINNERJOINDEPTONEMP.deptnoDEPT.deptnoANDenameSMITH;建议推荐使用显式的INNER JOIN语法可读性更好也更容易维护。INNER JOIN中的INNER可以省略直接写JOIN。➡️ 4. 左外连接Left Join4.1 什么是左外连接如果联合查询左侧的表完全显示我们就说是左外连接。也就是说左表的数据会全部出现在结果集中如果右表中没有匹配的行则对应的字段显示为NULL。语法SELECT字段名FROM表名1LEFTJOIN表名2ON连接条件4.2 案例查询所有学生的成绩场景查询所有学生的成绩如果这个学生没有成绩也要将学生的个人信息显示出来。数据准备-- 建两张表CREATETABLEstu(idINT,nameVARCHAR(30));-- 学生表INSERTINTOstuVALUES(1,jack),(2,tom),(3,kity),(4,nono);CREATETABLEexam(idINT,gradeINT);-- 成绩表INSERTINTOexamVALUES(1,56),(2,76),(11,8);执行左外连接查询-- 当左边表和右边表没有匹配时也会显示左边表的数据SELECT*FROMstuLEFTJOINexamONstu.idexam.id;结果分析idnameidgrade1jack1562tom2763kityNULLNULL4nonoNULLNULL解释stu表是左表它的所有数据jack, tom, kity, nono都显示出来了。学生kity和nono在exam表中没有成绩记录所以对应的grade字段显示为NULL。⬅️ 5. 右外连接Right Join5.1 什么是右外连接如果联合查询右侧的表完全显示我们就说是右外连接。右外连接与左外连接原理相同只是主表变成了右表。语法SELECT字段FROM表名1RIGHTJOIN表名2ON连接条件5.2 案例显示所有成绩及对应的学生场景对stu表和exam表联合查询把所有的成绩都显示出来即使这个成绩没有学生与它对应也要显示出来。SELECT*FROMstuRIGHTJOINexamONstu.idexam.id;结果分析idnameidgrade1jack1562tom276NULLNULL118解释exam表是右表它的所有数据56, 76, 8都显示出来了。成绩8对应的学生id11在stu表中不存在所以学生信息显示为NULL。️ 6. 综合练习题目列出部门名称和这些部门的员工信息同时列出没有员工的部门。方法一使用左外连接SELECTd.dname,e.*FROMdept dLEFTJOINemp eONd.deptnoe.deptno;方法二使用右外连接SELECTd.dname,e.*FROMemp eRIGHTJOINdept dONd.deptnoe.deptno;分析两种方法都能实现需求。方法一以dept表为左表方法二以dept表为右表。核心思想是哪个表的数据需要全部显示就把它作为主表左表或右表。 7. 实战 OJ 推荐理论学完一定要动手练习推荐 LeetCode 上的两道经典题目可以帮助你巩固表连接的知识LeetCode 178. 分数排名 (Rank Scores)LeetCode 626. 换座位 (Exchange Seats) 8. 总结连接类型关键字特点内连接INNER JOIN或JOIN只返回两个表中匹配的行不匹配的行不显示。左外连接LEFT JOIN返回左表的所有行右表无匹配则显示NULL。右外连接RIGHT JOIN返回右表的所有行左表无匹配则显示NULL。一句话记忆内连接取交集左外连接左表全保留右外连接右表全保留。❓ 9. 经典面试题1. 什么是内连接什么是外连接它们有什么区别内连接只返回两个表中满足连接条件的行。外连接返回一个表中的所有行即使另一个表中没有匹配的行。区别内连接只显示匹配的数据外连接会保留主表的所有数据未匹配的字段用NULL填充。2. 左外连接和右外连接有什么区别左外连接以左表为主表左表数据全部显示。右外连接以右表为主表右表数据全部显示。本质两者可以相互转换只需调整表的顺序即可。3. 写一个 SQL 查询列出所有部门及其员工信息包括没有员工的部门。-- 方法一左外连接SELECTd.dname,e.*FROMdept dLEFTJOINemp eONd.deptnoe.deptno;-- 方法二右外连接SELECTd.dname,e.*FROMemp eRIGHTJOINdept dONd.deptnoe.deptno;4. 假设有两个表Students学生和Scores成绩请查询所有学生的姓名及其成绩如果学生没有成绩也要显示其姓名。SELECTs.name,sc.scoreFROMStudents sLEFTJOINScores scONs.idsc.student_id;

相关新闻

最新新闻

嵌入式网络性能优化:EDMA3与EMAC/MDIO实战编程与避坑指南

嵌入式网络性能优化:EDMA3与EMAC/MDIO实战编程与避坑指南

1. 项目概述与核心价值在嵌入式系统开发,尤其是涉及高速数据流处理的场景里,直接内存访问(DMA)技术是决定系统性能上限的关键。它让外设和内存之间能“自己动手”,CPU只需发号施令,从而被解放出来处理更复杂…

2026/7/22 1:36:52
WeChatMsg微信聊天记录本地化处理实战指南:完整数据备份与分析方案深度解析

WeChatMsg微信聊天记录本地化处理实战指南:完整数据备份与分析方案深度解析

WeChatMsg微信聊天记录本地化处理实战指南:完整数据备份与分析方案深度解析 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitH…

2026/7/22 1:36:52
To B产品的客户生命周期管理:从POC试点到续费扩张的工程化运营体系

To B产品的客户生命周期管理:从POC试点到续费扩张的工程化运营体系

To B产品的客户生命周期管理:从POC试点到续费扩张的工程化运营体系 一、To B产品的增长模式:不是流量漏斗,而是信任飞轮 To B产品的增长模型与To C有本质区别。To C的增长依赖流量漏斗——曝光→点击→注册→激活→留存,每一步的转…

2026/7/22 1:36:52
计算机毕业设计之基于SpringBoot的无人值守自习室系统的设计与实现

计算机毕业设计之基于SpringBoot的无人值守自习室系统的设计与实现

随着新世纪无纸化办公方式的普及,自动化信息处理和基于网络的信息交互方式已被广泛应用。现在很多行业基本上都是交由计算机进行管理和测试,网络与计算机已成为整个线上管理体系中的重要组成部分。虽然信息技术广泛应用和数据存取更加方便,但…

2026/7/22 1:36:52
计算机毕业设计之基于SpringBoot的无忧宠物医院管理系统

计算机毕业设计之基于SpringBoot的无忧宠物医院管理系统

随着城市化进程的加速和居民生活水平的提高,宠物已成为许多家庭的重要成员。然而,传统的宠物医院管理方式存在诸多不足,如预约挂号繁琐、病历管理混乱、医患沟通不畅等问题,严重影响了宠物医院的服务质量和效率。因此,…

2026/7/22 1:36:52
零代码CRM工具选型指南:开源与SaaS方案对比

零代码CRM工具选型指南:开源与SaaS方案对比

1. 零代码CRM搭建工具的市场现状在数字化转型浪潮下,CRM系统已成为企业客户管理的标配。传统CRM开发需要专业编程知识和高昂成本,而零代码工具的出现彻底改变了这一局面。根据Gartner预测,到2025年70%的企业应用将通过低代码/零代码平台开发&…

2026/7/22 1:31:52

月新闻