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

【MySQL 10】表的内外连接 (带思维导图)

文章目录

  • 🌈 一、内连接
    • ⭐ 0. 准备工作
    • ⭐ 1. 隐式内连接
    • ⭐ 2. 显式内连接
  • 🌈 二、外连接
    • ⭐ 0. 准备工作
    • ⭐ 1. 左外连接
    • ⭐ 2. 右外连接

在这里插入图片描述

🌈 一、内连接

  • 内连接实际上就是利用 where 子句对两张表形成的笛卡儿积进行筛选,之前所有的查询都是内连接,也是在开发过程中使用的最多的连接查询。
  • 内连接查询的是两张表交集部分的数据。
  • 内连接分为隐式内连接和显式内连接,隐式内连接和显式内连接除了写法不同之外,查询的结果是一致的

image-20240817223305285

⭐ 0. 准备工作

  • 当前有三张表,分别是:部门表 dept,员工表 emp,薪资等级表 salgrade,之后的查询工作主要依赖于这三张表进行。
    • 这三张表各自包含的字段和每个字段的内容如下。
  1. 员工表 emp:员工编号 (empno)、员工姓名 (ename)、员工职位 (job)、员工领导的编号 (mgr)、雇佣时间 (hiredate)、月薪 (sal)、奖金 (comm)、部门编号 (deptno)。

image-20240817104531316

image-20240817104611038

  1. 部门表 dept:部门编号 (deptno)、部门名称 (dname)、部门所在地 (loc)。

image-20240817104818532

image-20240817104856942

  1. 薪资登记表 salgrade:等级 (grade)、此等级最低工资 (losal)、此等级最高工资 (hisal)。

image-20240817105133021

image-20240817105108090

⭐ 1. 隐式内连接

  • 之前的所有查询都属于隐式内连接。
select 字段列表 from1,2 where 条件 ... ;

案例:显示 SMITH 的名字和部门名称

  • 对员工表 emp 和部门表 dept 作笛卡尔积,在 where 子句中指定使用员工表中的部门表含与部门表中的部门编号过滤迪科尔基,并且指定员工姓名为 SMITH。

image-20240817214526315

⭐ 2. 显式内连接

select 字段列表 from1 [inner] join2 on 连接条件 ... and 其他条件;
  • 显式内连接才是标准的内连接写法

案例:显示 SMITH 的名字和部门名称

  • 在 on 子句中指定内连接的连接条件为员工表的部门编号等于部门表的部门编号,再在 and 之后指定其他筛选条件为员工姓名 ename = ‘SMITH’。

image-20240817221027758

🌈 二、外连接

  • 外连接分为左外连接右外连接

⭐ 0. 准备工作

  • 创建学生表:表中包含 id 和名字 name 两个字段。

image-20240817221609725

image-20240817221706662

  • 创建成绩表:表中包含 id 和成绩 grade 这两个字段。
    • 插入数据:让 id 为 1、2、11 的同学有成绩,而 3、4 号同学没有成绩,学生表中并没有 11 号同学。

image-20240817221919723

image-20240817221959285

⭐ 1. 左外连接

select 字段列表 from1 left [outer] join2 on 条件 ...  and 其他条件;
  • 左外连接查询的是表 1 的全部数据,让表 2 按照条件与表 1 进行拼接,如果条件不满足,则用 null 进行拼接。

image-20240817223022561

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

  • 要将学生表中的内容完全显示出来,将学生表 student 设为左表即可使用左外连接。如果左表中的某条记录根据连接条件没有找到匹配的右表中的记录,则会直接显示左表中的记录信息,而其对应的右表中的列信息将会用 null 值进行填充。
    • 将学生表和成绩表按照 id 进行连接起来,并且 3、4 号同学没有成绩。

image-20240817225446888

⭐ 2. 右外连接

select 字段列表 from1 right [outer] join2 on 条件 ... and 其他条件;
  • 右外连接查询的是表 2 的全部数据,让表 1 按照条件与表 2 进行拼接,如果条件不满足,则用 null 进行拼接。

image-20240817223142271

案例:对学生表和成绩表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要显示出来

  • 要将成绩表中的内容完全显示出来,将成绩表 exam 设为右表即可使用右外连接。如果右表中的某条记录根据连接条件没有找到匹配的左表中的记录,则会直接显示右表中的记录信息,而其对应的左表中的列信息将会用 null 值进行填充。
    • 将学生表和成绩表按照 id 进行连接起来,并且没有 11 号同学。

image-20240817225356349

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 科技大厂对AI的垄断
  • Ansible:远程自动化运维
  • EmguCV学习笔记 VB.Net 6.1 边缘检测
  • 深入探讨 C++ 中的 `constexpr` 函数及其限制
  • UE5.4 - 编辑器页面和概念术语
  • 达梦数据库表结构导出到 Excel 教程
  • 【hot100篇-python刷题记录】【字母异位词分组】
  • 基于YOLOv8的船舶目标检测与分割(ONNX模型)
  • ASP.NET Core 6.0 传统鉴权配置
  • Docker 推送镜像到私有仓库【真实案例】
  • 【Oracle19c】手工数据统计信息并导入dmp数据
  • LeetCode128.最长连续序列
  • select模型实现TCP聊天室
  • 聚星文社推文软件
  • Qt/QML学习-ScrollView
  • “大数据应用场景”之隔壁老王(连载四)
  • 2019.2.20 c++ 知识梳理
  • conda常用的命令
  • create-react-app项目添加less配置
  • HTML-表单
  • HTTP请求重发
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • mysql常用命令汇总
  • Python_网络编程
  • Python爬虫--- 1.3 BS4库的解析器
  • Spring-boot 启动时碰到的错误
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 解析 Webpack中import、require、按需加载的执行过程
  • 如何胜任知名企业的商业数据分析师?
  • 软件开发学习的5大技巧,你知道吗?
  • 项目实战-Api的解决方案
  • 7行Python代码的人脸识别
  • Android开发者必备:推荐一款助力开发的开源APP
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​卜东波研究员:高观点下的少儿计算思维
  • #if和#ifdef区别
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (推荐)叮当——中文语音对话机器人
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转载)Google Chrome调试JS
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • *p++,*(p++),*++p,(*p)++区别?
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET Framework、.NET Core 、 .NET 5、.NET 6和.NET 7 和.NET8 简介及区别
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET分布式缓存Memcached从入门到实战
  • .NET面试题(二)
  • @ohos.systemParameterEnhance系统参数接口调用:控制设备硬件(执行shell命令方式)
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析
  • [ASP.NET MVC]如何定制Numeric属性/字段验证消息
  • [C# 开发技巧]实现属于自己的截图工具