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

MySQL之多表查询

1. 前言

  • 多表查询,也称为关联查询.指两个或两个以上的表一起完成查询操作.
  • 前提条件 : 这些一起查询的表之间是有关系的(一对一/一对多).他们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键.

2. 笛卡尔积现象(交叉连接)

(1).例 : 

如果我们在两个表中未进行条件关联,直接查找,可能会出现笛卡尔积现象.即第一张表的一个数据需要跟第二张表的所有数据匹配.又称交叉连接.

06ccc2894ba8412da338efae51012d8f.png

  • 图中2889条数据=第一张表的记录数X第二张表的记录数.
  • CROSS JOIN的作用就是可以把任意表进行连接,即使这两张表不相关.
  • 为了避免出现笛卡尔积现象,我们可以在WHERE子句中加入有效的条件.

3. 带有连接条件的多表查询

例 : 

51e06243af564e038d17244658638937.png

  • 从第一张表的第一条记录开始,与第二章表的所有记录进行条件关联,剩下的是满足关联条件的记录. 只剩下106条记录.因为employees表中第一条记录的departmentid字段为null.
  • FROM子句中,可以给表起别名.一旦起了别名,后续WHERE子句中,就不能使用以前的表名了.相当于表的别名对原先的表名进行了覆盖.但字段的别名不会对原字段进行覆盖.

4. 多表查询的分类

  • 等值连接与非等值连接
  • 自连接与非自连接
  • 内连接与外连接

5. 等值连接与非等值连接

(1).等值连接 : 

上述例就是等值连接.因为连接条件是=运算符.

(2). 非等值连接 : 

自然而然,连接条件不是=运算符的,即是非等值连接.比如 : 

9d95a5ad116f43928e401890cf9714be.png

  • 当查询的字段是两个表中的共有字段时,需要指定是哪个表中的字段.不然会报错.
  • 对于数据库中表记录的查询和变更,只要涉及多个表,都需要在列名前加表的别名进行限定(如d.locationid).

6. 自连接与非自连接

(1). 自连接

例 : 

40667343aa8143dbb5205d1b32989660.png

  • 自连接顾名思义,自己的表与自己连接查询.
  • emp与mana本质上是一张表(物理磁盘上只有一张表),只是用取别名的方式在逻辑上虚拟成两个表代表不同的意义,然后两个表进行内连接,外连接.37675544beca4d9fbfa183d2ffc4394c.png

(2) 非自连接

上述例均为非自连接.

7. 内连接与外连接

(1). 内连接 : (数学中的交集)

上述我们涉及到的全部例子均是内连接.

合并具有同一列的两个以上的行,结果集中不包含一个表与另一个表不匹配的行.

格式为 :

SELECT 字段列表

# INNER可省略.

FROM A表 JOIN B表

ON 关联条件

WHERE 等其他子句.

例 : 

58bccc65aa344bd3875f38bf35c92b88.png

只能查询到满足关联条件的记录,不能查询到不满足条件的记录.

还可以多个表内连接.

0115e00e084f48cabde00db945858dda.png

(2). 外连接

  • 外连接分为 : 左外连接,右外连接,满外连接.
  • 左外连接(LEFT OUTER JOIN / LEFT JOIN) : 结果集中不仅包含了两个表中满足连接条件的记录,还包含了左表中不满足连接条件的记录.
  • 右外连接(RIGHT OUTER JOIN / RIGHT JOIN) : 结果集中不仅包含了两个表中满足连接条件的记录,还包含了右表中不满足连接条件的记录.
  • 满外连接 : 结果集中不仅包含了两个表中满足条件的记录,还包含了左表中不满足条件的记录+右表中不满足条件的记录.

8. 左外连接与右外连接

(1). 左外连接

例 : 

5b5755e647ed4824b792a66350fd548a.png

可以看到有107条记录,而上述内连接的情况下只有106条记录.可知左外连接包含了左表不满足条件的记录.

(2). 右表连接

右表连接与左表连接类似.

格式 : 

SELECT 查询字段

FROM A表

RIGHT JOIN B表

ON 连接条件

WHERE 其他子句.

9. 满外连接与UNION关键字

  • SQL99是支持满外连接的.即使用FULL JOIN/FULL OUTER JOIN来实现
  • 但MySQL并不支持这种写法.但可以使用LEFT JOIN UNION RIGHT JOIN代替.

10. UNION的使用

(1). 合并查询结果 : 利用UNION关键字,可以给出多条SELECT语句,并将他们的结果组合成单个结果集.合并时,两个表对应的列数和数据类型必须相同.并且相互对应.各个SELECT语句间使用UNION/UNION ALL关键字分隔.

(2). UNION操作符

返回两个查询的结果集的并集,并去重复记录.

2f4514c9bc50448aa1cae2d3ff518bf4.png

(3). UNION ALL操作符

返回两个查询的结果集的并集,但并不去重.

fdfa6204c21d4dbb9da2b4a3661a9ee0.png

 

注意 : 执行UNION ALL语句时所需要的资源比UNION语句少.如果明知合并数据候的结果集不存在重复数据,或不需要去重,则尽量使用UNION ALL语句,以提高查询效率.

(4). 例 : UNION ALL实现连接 : 对应下表 左中 UNION ALL 右上 ---> 左下

SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL
UNION ALL #没有去重操作,效率高
SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments dON e.`department_id` = d.`department_id`;

11. 七种SQL JOINS的实现

如图 : 

  • 左上 : 左外连接 LEFT JOIN
  • 左中 : 左外连接+WHERE过滤匹配的行
  • 左下 : 左外连接+WHERE过滤匹配的行 UNION ALL 右外连接 / 右外连接+WHERE过滤匹配的行 UNION ALL 左外连接
  • 中上 : 内连接 仅有匹配的行
  • 右下 : 左外连接+WHERE过滤匹配的行 UNION ALL 右外连接+WHERE过滤匹配的行
  • 右上 : 右外连接 RIGHT JOIN
  • 右中 : 右外连接+WHERE过滤匹配的行

ffba574ceee94f409eb3158aee79a2f6.png

相关文章:

MySQL之多表查询

1. 前言 多表查询,也称为关联查询.指两个或两个以上的表一起完成查询操作.前提条件 : 这些一起查询的表之间是有关系的(一对一/一对多).他们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键. 2. 笛卡尔积现象(交叉连接…...

极端天气频发,我们普通人如何保全自己

随着全球气候变暖的加剧,极端天气事件如同一位不请自来的“不速之客”,频繁地闯入我们的生活。暴风雨、暴风雪、台风、干旱、热浪等极端天气现象,不仅给人们的生命和财产安全带来了前所未有的挑战,更对社会的正常秩序构成了严重威…...

直面市场乱价,品牌商家该如何解决?

在当今的商业世界中,品牌商面临着一系列严峻挑战,其中如何有效管理经销商价格是一个关键难题。经销商随意调整价格的行为,不仅会损害品牌的信誉与形象,还可能导致市场秩序混乱,使品牌利润大幅缩水。因此,采…...

Spring中的Bean相关理解

在Spring框架中,Bean是一个由Spring IoC容器实例化、配置和管理的对象。Bean是一个被Spring框架管理并且被应用程序各个部分所使用的对象。Spring IoC容器负责Bean的创建、初始化、依赖注入以及销毁等生命周期管理。 注:喜欢的朋友可以关注公众号“JAVA学…...

操作系统实战(二)(linux+C语言)

实验内容 通过Linux 系统中管道通信机制,加深对于进程通信概念的理解,观察和体验并发进程间的通信和协作的效果 ,练习利用无名管道进行进程通信的编程和调试技术。 管道pipe是进程间通信最基本的一种机制,两个进程可以通过管道一个在管道一…...

哪些情况下会触发MySQL的预读机制?

MySQL的预读机制主要与其底层存储引擎的实现有关,尤其是InnoDB存储引擎。预读(Pre-reading)或预取(Prefetching)是一种性能优化技术,其中数据库系统主动读取可能很快就会被查询到的数据页到缓冲池&#xff…...

react使用谷歌人机验证

在项目中,需要对请求验证,防止被爆破,这里使用的是谷歌的recaptcha-v3。 1.申请谷歌人机验证的api 申请链接,申请完后需要将两个谷歌颁发的key分别写入前,后端的配置环境中,后面会使用. 2.前端部分 前端使用的是viteC…...

java JMH 学习

JMH 是什么? JMH(Java Microbenchmark Harness)是一款专用于代码微基准测试的工具集,其主要聚焦于方法层面的基准测试,精度可达纳秒级别。此工具由 Oracle 内部负责实现 JIT 的杰出人士编写,他们对 JIT 及…...

本地运行AI大模型简单示例

一、引言 大模型LLM英文全称是Large Language Model,是指包含超大规模参数(通常在十亿个以上)的神经网络模型。2022年11月底,人工智能对话聊天机器人ChatGPT一经推出,人们利用ChatGPT这样的大模型帮助解决很多事情&am…...

图像处理:时域、空域、频率的滤波介绍

首先要搞清楚为什么会呈现出不同域的维度,来理解和处理图像,原因是图像的构成有多个维度的信息特点。比如一段视频从时间顺序来看,相邻的2个图像帧绝大部分信息是相同的,这就构成了前向预测的理论基础;比如一帧图像从空…...

TC8002D 是一颗带关断模式的音频功放IC

一、一般概述 TC8002D是一颗带关断模式的音频功放IC。在5V输入电压下工作时,负载(3Ω)上的平均功率 为3 W,且失真度不超过10%。而对于手提设备而言,当VDD作用于关断端时,TC8002D将会进入关断模式,此时的功耗极…...

深度学习之基于Vgg19预训练卷积神经网络图像风格迁移系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 在数字艺术和图像处理领域,图像风格迁移技术一直备受关注。该技术可以将一幅图像的内容和…...

MySQL:多表查询练习

#1.出版社信息 与 图书信息 交叉连接 select * from 出版社信息 cross join 图书信息; #2.从“客户信息”和“订单信息”两张数据表中查询购买了商品的客户信息,要求查询结果显示客户姓名、订单编号、订单状态。 select 客户信息.客户姓名,订单信息.订单编号,订单…...

# 从浅入深 学习 SpringCloud 微服务架构(八)Sentinel(1)

从浅入深 学习 SpringCloud 微服务架构(八)Sentinel(1) 一、sentinel:概述 1、前言 – 服务熔断 Hystrix 的替换方案。 1)2018年底 Netflix 官方宣布 Hystrix 已经足够稳定,不再积极开发 Hys…...

[微信小程序] 入门笔记2-自定义一个显示组件

[微信小程序] 入门笔记2-自定义一个显示组件 0. 准备工程 新建一个工程,删除清空app的内容和其余文件夹.然后自己新建pages和components创建1个空组件和1个空页面. 设定 view 组件的默认样式,使其自动居中靠上,符合习惯.在app.wxss内定义,作用做个工程. /**app.wxss**/ /* 所…...

YOLO代码复现

睿智的目标检测66——Pytorch搭建YoloV8目标检测平台_pytorch_quantization yolov8-CSDN博客 Mask rcnn代码实现_pytorch版_适用30系列显卡_mask rcnn 30显卡-CSDN博客 完整且详细的Yolov8复现训练自己的数据集-CSDN博客...

使用fitten code插件(vscode),替换通义千问,识别需求中的输入输出

今天我们介绍一个工具,具体介绍可以参考我的这篇文章的介绍,支持vs code 插件,Fitten Code是一款由非十科技开发的AI代码助手,旨在通过大模型驱动来提升编程效率和体验-免费神器-CSDN博客https://blog.csdn.net/lijigang100/article/details/137833223?spm=1001.2014.3001…...

vue使用pdfjs-dist在电脑上展示PDF文件

安装 安装的时候一定要带上版本号,这里采用的是2.0.943(因为这个版本对于我目前的项目比较合适可以正常使用,其他版本大概率会报错),当前项目使用的是vue2,vue的版本是2.5.10 npm install pdfjs-dist@2.0.943 查看版本发现这玩意版本非常之多 使用 在使用pdfjs-dist库…...

【网站项目】戒烟网站

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…...

慢性软组织疼痛如何使用DMS深层肌肉刺激仪进行治疗?

使用DMS深层肌肉刺激仪治疗慢性软组织疼痛,可以遵循以下步骤: 准备工作:首先,确保DMS设备已经充电或插上电源,并根据需要调整振动强度和频率。DMS深层肌肉刺激仪是通过快速连续的振动和打击来刺激深层肌肉的设备&#…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...