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

【mysql】—— 表的内连和外连

在MySQL中,内连(INNER JOIN)外连(OUTER JOIN)是用于联接多个表的操作。接下来,我分别给大家介绍下二者。

目录

(一)内连接

1、什么叫内连接

2、语法格式

 3、案例:显示SMITH的名字和部门名称(来自oracle 9i的经典测试表)

(二)外连接

1、什么叫外连接

2、左外连接

2.1案例演示

3、右外连接

3.1案例演示

4、全外连接

5、练习演示

(三)实战OJ

(四)总结


(一)内连接

1、什么叫内连接

在MySQL中, 内连接 实际上就是利用 where 子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。

2、语法格式

  •  💨 以下是内连接的基本语法:

SELECT 列名
FROM 表1
INNER JOIN 表2 ON 表1.关联列 = 表2.关联列;

内连会返回同时存在于表1和表2中的行,并且仅包括满足关联条件的行。

 3、案例:显示SMITH的名字和部门名称(来自oracle 9i的经典测试表

之前我们通过笛卡尔积可以对其进行操作,今天我们通过内连接的方式来进行有关操作。具体如下:

用前面的写法
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';
  • 结果展示:

【小结】

  • 内连接的关键点是只返回两个表中连接条件满足的行,而不包括任何一个表中没有匹配的行;
  • 如果某行在其中一个表中没有匹配的行,则不会包含在结果中
  • 需要注意的是,内连接并不包括符合条件但值为NULL的行。如果你需要包含这些行,可以使用接下来讲到的外连接

 


(二)外连接

1、什么叫外连接

在MySQL中,外连接是一种用于检索两个或多个表之间的数据的方法,它包括左外连接、右外连接和全外连接

2、左外连接

  1. 左外连返回左表中的所有行,以及右表中与左表满足联接条件的行;
  2. 如果右表中没有匹配的行,则返回 NULL 值。

 💨 语法如下select 字段名 from 表名1 left join 表名2 on 连接条件

2.1案例演示

首先,我先建立两张表以供实现需要。具体如下:
  • 表一:

  • 表二:

需求查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来
当左边表和右边表没有匹配时,也会显示左边表的数据:
select * from stu left join exam on stu.id=exam.id;


3、右外连接

  1. 右外连与左外连相反,返回右表中的所有行,以及左表中与右表满足联接条件的行;
  2. 如果左表中没有匹配的行,则返回 NULL 值。

💨 语法如下select 字段名 from 表名1 right join 表名2 on 连接条件

3.1案例演示

需求 :对 stu 表和 exam 表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要 显示出来
select * from stu right join exam on stu.id=exam.id;

4、全外连接

  1. 全外连返回左表和右表中的所有行,并将它们联接在一起;
  2. 如果某个表中没有匹配的行,则返回 NULL 值;
  3. MySQL不直接支持全外连,可以使用UNION操作符来模拟实现。

5、练习演示

需求 :列出部门名称和这些部门的员工信息,同时列出没有员工的部门

现在有这样的场景,一家公司为了业务架构的完整设置了某个部门,但是暂时这个部门还没有人,随着之后公司的发展这个部门才会发挥作用。

  • 方法展示:

 代码展示:

select dname,ename,dept.deptno from dept left join emp on dept.deptno=emp.deptno order by dept.deptno asc;

输出显示: 

 


(三)实战OJ

大家看完上诉可以通过下面这两道题目练练手:

  • 分数排名
  • Exchange Seats

(四)总结

通过内连和外连操作,可以根据表之间的关联条件将数据联接起来,并进行灵活的查询和分析。具体选择哪种联接类型取决于你的需求和数据结构。

http://www.lryc.cn/news/269507.html

相关文章:

  • VSCode远程开发配置
  • 复数值神经网络可能是深度学习的未来
  • 【C语言】数据结构——排序二(快排)
  • 企业私有云容器化架构
  • SpringBoot+modbus4j实现ModebusTCP通讯读取数据
  • Linux性能优化全景指南
  • 树莓派 ubuntu20.04下 python调讯飞的语音API,语音识别和语音合成
  • 分布式系统架构设计之分布式系统实践案例和未来展望
  • 【办公软件】Excel双坐标轴图表
  • 彻底理解前端安全面试题(1)—— XSS 攻击,3种XSS攻击详解,建议收藏(含源码)
  • UE5.1_AI随机漫游
  • 智慧城市新型基础设施建设综合方案:文件全文52页,附下载
  • GitHub Copilot 终极详细介绍
  • LeetCode第63题 - 不同路径 II
  • python+django网上银行业务综合管理系统vue_bvj8b
  • 【软件工程】走进瀑布模型:传统软件开发的经典之路
  • 两个字符串间的最短路径问题 (100%用例)C卷 (JavaPythonNode.jsC语言C++)
  • 通过ADB来实现脚本来控制手机
  • 机器学习之K-means聚类
  • SSH 端口转发:如何将服务绑定到本地 IP 地址
  • 回归预测 | MATLAB实ZOA-LSTM基于斑马优化算法优化长短期记忆神经网络的多输入单输出数据回归预测模型 (多指标,多图)
  • python实现图像的二维傅里叶变换——冈萨雷斯数字图像处理
  • We are a team - 华为OD统一考试
  • NFC物联网智慧校园解决方案
  • 鸿蒙系列--组件介绍之容器组件
  • perl使用find函数踩坑
  • Java IDEA JUnit 单元测试
  • 深入理解 c++ 函数模板
  • 系列十二、Linux中安装Zookeeper
  • k8s之陈述式资源管理