【MySQL数据库】多表查询(笛卡尔积现象,联合查询、内连接、左外连接、右外连接、子查询)-通过练习快速掌握法
在DQL的基础查询中,我们已经学过了多表查询的一种:联合查询(union)。本文我们将系统的讲解多表查询。
笛卡尔积现象
首先,我们想要查询emp表和stu表两个表,按照我们之前的知识栈,我们直接使用:
select * from emp,stu;
当查询emp时:15条记录被查询
当查询stu时:5条记录被查询
但是让我们来观察结果:
哇,查询到了70条记录 。而且根据结果我们可以看出:左表emp的每条记录都会与右表stu的每条记录组成一条新的记录,也就是14*5=70条记录。这种现象非常符合离散数学中学到的笛卡尔积的结果,所以我们将这种现象称为笛卡尔积现象。
笛卡尔积(Cartesian Product):表示两个集合之间的所有可能的有序对的集合
笛卡尔积的性质包括:
- 笛卡尔积的结果是一个新集合。
- 如果 AA 和 BB 其中一个为空集,则结果也为空集。
- 笛卡尔积的顺序是重要的,即 A×B≠B×A。
我们如何实现15+4的结果呢?直接使用上面的select肯定是不行了。
那么,此时有一个叫联合查询的方式出现在脑海里:
联合查询
关键字:【union all】
select empno,ename,job from emp
union all
select id,nick,pwd from stu;
观察结果:19=15+4条记录 (使用union代替union all可以实现去重的功能)
但是为了将记录查询出来,我们 必须合适选择每个表的字段,将两个表查询的字段的数据类型一一对应。empno int = id int,ename varchar = nick varchar ......
如果数据类型对应不上,那么将无法查询,结果是:
直接查询的条件限制法
那么联合查询也不能符合我们对查询结果的预期,这时候需要我们转换思路。从笛卡尔积现象开始:【需求:查询员工表以及每个员工对应的部门信息】
首先直接查询:
对于查询的结果,虽然有重复, 但至少有我们需要的结果,那么只需要将这个表中的有效记录提取出来,就可以了。也就是使用where条件进行限定:
此时我们查询的结果就符合我们的预期了。但注意,这时候我们操作时必须给每个字段指定上是哪个表的字段,不然的话,该字段属于二义性字段,无法通过语法分析,也就不能执行了。
内连接
select field from tb1
[inner] join tb2 on condition;
等值连接
eg.根据一个编号查另一个表中改编号对应的内容。常见于:根据子表外键连接父表主键
【练习:查询员工表以及每个员工对应的部门信息】
select * from emp [inner]join dept on emp.DEPTNO = dept.DEPTNO;
非等值连接
eg.根据一个表的某个字段,查另一个表中该字段属于哪段区间的信息。实际用途:等级划分
【练习:根据员工的薪水查出薪水的等级】
自连接
eg.自连接是某个表的某个字段信息存储的数据是本表的另一条记录的信息。常用于:事物关联
【练习:根据员工表的领导编号查询领导的名字】
自连接的流程:为显示的字段起别名(避免两个结果字段名冲突,非必须)=》from选择查询表=》join 连接表(本表),并起别名(避免二义性,必须)=》连接条件。[过程中的每个字段都需要明确指出是哪个表]
外连接
由于内连接会将连接条件的字段中空值的记录给过滤掉,所以为了显示较为全面的记录,我们采用外连接的方式进行多表查询。
左外连接
左外连接就是(left [outer] join ... on...)。显示主表的所有字段,并将被连接的从表符合连接条件的记录连接到主表,如果没有,主表显示原本记录,从表的字段中为空。
【练习:查询员工表以及每个员工对应的部门信息---显示所有员工】
右外连接
右外连接就是(right [outer] join ... on...)。与左外连接类似。
【练习:查询员工表以及每个员工对应的部门信息---显示所有部门】
我们对比发现,右外连接显示的记录比左外连接的记录多一条,多出的一条是部门表中的数据,但该部门在员工表中没有员工,所以全部显示为空。
注:外连接查询的结果记录数 >= 内连接查询到的结果记录数
左外连接【左图】、右外连接【右图】
子查询
子查询:嵌套在其它SQL语句内的查询语句,且必须出现在圆括号内(查询一般是指select语句):子查询的结果可以作为外层查询的过滤条件或计算字段。
标量子查询
子查询返回结果是单个值,如数字、字符串、日期等最简单的形式。这种子查询称为标量子查询。【常用的操作符:| = | <> | > | >= | < | <= |】
【练习:查询销售部的部门员工信息】
第一步:查询销售部的部门编号
select deptno from dept where dname="SALES";
第二步:查询部门编号为上述结果的员工
select * from emp where deptno = 上条语句的结果;
第三步:合并一条语句:
select * from emp where deptno = (select deptno from dept where dname="SALES");
标量子查询可以在子句中使用聚合函数、而且子句的位置还可以出现在select后作为字段出现:
【练习:查询部门名,以及每个部门的人数】
select dname, (select count(*) from emp where dept.deptno=emp.deptno) emps
from dept;
列子查询
子查询的结果是一列(或者多列),这种子查询称为列子查询。
【常用操作符:in、not in、any、some、all】
IN:在指定的集合范围之内,多选一
NOT IN:不再指定的集合范围之内
ANY:子查询返回列表中,有任意一个满足即可【相当于集合所有元素作 or 运算】
SOME:与ANY相同,SOME与ANY等价
ALL:子查询返回列表的所有值都要满足【相当于集合所有元素之间作 and 运算】
【练习:查询销售部(SALES)和调研部(RESEARCH)所有员工信息】
select *
from emp
where deptno in (select deptno from dept where dname in ("SALES","RESEARCH"));-- or:
select *
from emp
where deptno in (select deptno from dept where dname="SALES" or dname="RESEARCH");
【练习:查询比销售部的所有人的工资都高的员工信息】
比所有人都高,也就是sal > all( {...} )
通过这个练习,我们不仅练习了all运算,我们还知道了,子句可以嵌套子句。
行子查询
子查询的返回结果是一行(可以是多行),这种子查询称为行子查询。
【常用操作符:| = | <> | in | not in】
【练习:查询与“SMITH”的 薪资以及直属领导 都相同的员工信息】
-- (单行结果)
select * from emp where (sal,mgr) = (select sal,mgr from emp where ename = "SMITH");-- (多行结果)
select * from emp where (sal,mgr) in (select sal,mgr from emp where ename = "SMITH");
通过该练习,我们掌握了新的知识:
(field1,field2,...,fieldn) 可以通过加圆括号的方式直接与行结果进行运算【= | <> | in | not in】
表子查询
子查询的结果可以是多行多列,产生这种结果的子查询称为表子查询。【常用操作符:IN】
这种就是行子查询的 in 操作。
-- (多行结果)
select * from emp where (sal,mgr) in (select sal,mgr from emp where ename = "SMITH");
感谢大家!欢迎指导、询问、探讨知识!
相关文章:
【MySQL数据库】多表查询(笛卡尔积现象,联合查询、内连接、左外连接、右外连接、子查询)-通过练习快速掌握法
在DQL的基础查询中,我们已经学过了多表查询的一种:联合查询(union)。本文我们将系统的讲解多表查询。 笛卡尔积现象 首先,我们想要查询emp表和stu表两个表,按照我们之前的知识栈,我们直接使用…...
jmeter将返回的数据写入csv文件
举例说明,我需要接口返回体中的exampleid与todoid的数据信息(使用边界提取器先将其提取),并将其写入csv文件进行保存 使用后置处理器BeanShell 脚本实例如下 import java.io.*;// 设置要写入的文件路径 String filePath "…...
AI如何在财务工作中提升效率的一些看法
文章目录 1. 自动化重复性任务2. 财务预测与分析3. 欺诈检测与风险管理4. 智能报表与决策支持5. 税务管理优化6. 提升团队协作与客户体验未来的趋势与挑战结论 随着人工智能(AI)技术的迅猛发展,其正全方位地革新各行各业的运作模式࿰…...
OpenCV入门指南:从安装到基本操作
引言 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它包含了数百种计算机视觉算法,广泛应用于图像处理、视频分析、物体检测、人脸识别等领域。本文将带你从安装OpenCV开始,逐步了解其基…...
简单以太网配置
display arp //查看路由器mac地址 交换机配置命令: system-view // 从用户视图进入系统视图 dis mac-address //查看mac地址表 路由器配置命令: system-view // 从用户视图进入系统视图 int GigabitEthernet 0/0/0 //进入G口 0/0/0 进入之后配置网关: ip addre…...
蓝桥杯嵌入式组第十四届省赛题目解析+STM32G431RBT6实现源码
文章目录 1.题目解析1.1 分而治之,藕断丝连1.2 模块化思维导图1.3 模块解析1.3.1 KEY模块1.3.2 LED模块1.3.3 LCD模块1.3.4 TIM模块1.3.4.1 频率变化处理1.3.4.1 占空比计算 1.3.5 ADC模块 2.源码2.1cubemx配置3.第十四届题目 前言:STM32G431RBT6实现嵌入…...
让双向链表不在云里雾里
又来博客留下我的足迹了,哈哈哈,这次是对于双向链表的理解 目录 创建双向链表: 申请结点: 双向链表初始化: 双向链表插入结点: 双向链表删除结点: 双向链表的打印: 双向链表…...
基于django+vue的购物商城系统
开发语言:Python框架:djangoPython版本:python3.8数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 系统首页 热卖商品 优惠资讯 个人中心 后台登录 管理员功能界面 用户管理 商品分类管理…...
在Vue3中使用Echarts的示例
1.常用-引用ts文件方式 1.1 导出ts文件-一个简单的柱状图 export const baseBarChart (xdata: string[], data: number[][], legendData: string[]) > {if (data.length 0) {return noData;}// 定义颜色数组const color [#00CCCC,#FF9900,#1677DC,#FF6666,#B366FF,#666…...
TCP协议的多线程应用、多线程下的网络编程
DAY13.2 Java核心基础 多线程下的网络编程 基于单点连接的方式,一个服务端对应一个客户端,实际运行环境中是一个服务端需要对应多个客户端 创建ServerSocketNable类,多线程接收socket对象 public class ServerSocketNable implements Run…...
每日学习Java之一万个为什么(待补充)
Git分支操作 git branch 分支名 git branch -v git checkout -b 分支名 git checkout 分支名 git merge 分支名 git branch -d | -D 分支名Git冲突 git同名文件合并的最基本单位是行。同名文件同一行不同就会发生冲突。 解决办法:及时沟通,手动更改&…...
设计C语言的单片机接口
一、主要内容 (一)控制引脚 1、定义管脚 // 定义管脚的结构体 struct pin{ int id; // 管脚编号 int mode; // 模式,输入为1,输出为0 int pull; // 输入电阻 int driver; // 功率 } 2、输出电平 语法: void pin_output(s…...
博客迁移----宝塔面板一键迁移遇到问题
前景 阿里云轻量级服务器到期了,又免费领了个ESC, 安转了宝塔面板。现在需要迁移数据,使用宝塔面板一键迁移功能,完成了数据的迁移,改了域名的解析,现在进入博客是显示502 bad grateway 宝塔搬家参考链接…...
抽象工厂模式 (Abstract Factory Pattern)
抽象工厂模式 (Abstract Factory Pattern) 是一种创建型设计模式,它提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 一、基础 1. 意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 2. …...
LeetCode 第14~16题
目录 LeetCode 第14题:最长公共前缀 LeetCode 第15题:三数之和 LeetCode 第16题:最接近的三数之和 LeetCode 第14题:最长公共前缀 题目描述 编写一个函数来查找字符数组中的最长公共前缀。如果不存在公共前缀,返回字符…...
深入了解Linux —— git三板斧
版本控制器git 为了我们方便管理不同版本的文件,就有了版本控制器; 所谓的版本控制器,就是能够了解到一个文件的历史记录(修改记录);简单来说就是记录每一次的改动和版本迭代的一个管理系统,同…...
再学:abi编码 地址类型与底层调用
目录 1.内置全局变量及函数 2.abi 3.地址类型 4.transfer 1.内置全局变量及函数 2.abi data就是abi编码 abi描述:以json格式表明有什么方法 3.地址类型 4.transfer x.transfer:合约转给x call 和 delegatecall 是 Solidity 中用于底层合约调用的函数࿰…...
Redis的消息队列是怎么实现的
Redis 本身并不是一个专门的消息队列系统,但它的 List、Pub/Sub 和 Stream 数据结构可以用来实现消息队列的功能。以下是 Redis 实现消息队列的几种常见方式: 1. 基于 List 实现消息队列 Redis 的 List 是一个双向链表,支持在头部和尾部进行高效的插入和删除操作,非常适合…...
图论入门【数据结构基础】:什么是树?如何表示树?
图论是计算机科学和数学中的一个重要分支,研究图的结构及其性质。之前我们介绍了图的基本概念和表示:图论入门【数据结构基础】:什么是图?如何表示图?,本文将介绍树的基本概念、性质及其在计算机科学中的应…...
微信小程序订阅消息发送消息,点击消息进入小程序页面
1、在小程序官网订阅消息选用或创建消息模板获取模板ID可多个 如图: 2、微信小程序前端页面发送请求订阅权限 请求模板id的权限可以是一个可以是多个,用户同意订阅,获取code传递给后端——后端拿到code生成唯一的openid用于发送订阅消息 注…...
基于小参数量大语言模型(Small Language Models) ---- 在制造业落地降本增效应用:可行性研究初探
文章大纲 一、引言二、小参数量模型概述基本技术要求小参数量大语言模型在制造业场景中的适用性分析(一)排产优化(二)错误根因分析三、制造业小参数量大语言模型开源解决方案简介Bert 系列 模型Google微软MetaMistral AI国产解决方案四、技术实现方案进行逻辑(一)模型选择…...
pandas中excel自定义单元格颜色
writerpd.ExcelWriter(filepathf05教师固定学生占比1月{today}.xlsx,engineopenpyxl) df.to_excel(writer,sheet_name明细) piv1.to_excel(writer,sheet_name1月分布) wswriter.book.create_sheet(口径) ws.cell(1,1).value综合占比: ws.cell(1,2).value固定学生占比…...
MySQL事务:确保数据一致性的关键机制
目录 1. 为什么需要事务? 2. 什么是事务? 3. 事务的四大特性 3.1 原子性(Atomicity) 3.2 一致性(Consistency) 3.3 隔离性(Isolation) 3.4 持久性(Durability&…...
图论入门【数据结构基础】:什么是图?如何表示图?
图(Graph) 是一种非线性数据结构,用于表示对象之间的关系。图由 顶点(Vertex) 和 边(Edge) 组成,其中顶点表示对象,边表示对象之间的关系。图广泛应用于计算机科学、数学…...
SpringBoot中使用AJ-Captcha实现行为验证码(滑动拼图、点选文字)
简介 AJ-Captcha行为验证码,包含滑动拼图、文字点选两种方式,UI支持弹出和嵌入两种方式。后端提供Java、Golang实现,前端提供了php、angular、html、vue、uni-app、flutter、android、ios等代码示例。点击前往AJ-Captcha代码仓库 引入Maven…...
【国际研讨会】2025年3-5月通信、算法、电气工程、自动化等领域国际学术会议征稿开启!大型学术盛宴!
【国际研讨会】2025年3-5月通信、算法、电气工程、自动化等领域国际学术会议征稿开启!大型学术盛宴! 【国际研讨会】2025年3-5月通信、算法、电气工程、自动化等领域国际学术会议征稿开启!大型学术盛宴! 文章目录 【国际研讨会】…...
AI战略家:X厂三年复盘大纲——业务与组织双视角深度拆解
一、业务负责人视角:从0到1与从1到100的核心能力模型 (一)阶段能力要求与问题预判 1. 从0到1:破局能力 核心能力升级框架: 需求洞察三阶漏斗: 行业需求池:广泛收集行业内的各种需求ÿ…...
LuaJIT 学习(4)—— FFI 语义
文章目录 C Language SupportC Type Conversion RulesConversions from C types to Lua objects例子:访问结构体成员 Conversions from Lua objects to C typesConversions between C types例子:修改结构体成员 Conversions for vararg C function argum…...
剑指 Offer II 078. 合并排序链表
comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20078.%20%E5%90%88%E5%B9%B6%E6%8E%92%E5%BA%8F%E9%93%BE%E8%A1%A8/README.md 剑指 Offer II 078. 合并排序链表 题目描述 给定一个链表数组,每个链…...
go回调函数的使用
在Go语言中,回调函数可以有参数,也可以没有参数。它们的定义和使用方式略有不同,但本质上都是将函数作为参数传递给另一个函数,并在适当的时候调用它。以下是带参数和不带参数的回调函数的示例和说明。 1. 不带参数的回调函数 不…...
CBNet:一种用于目标检测的复合骨干网架构之论文阅读
摘要 现代顶级性能的目标检测器在很大程度上依赖于骨干网络,而骨干网络的进步通过探索更高效的网络结构带来了持续的性能提升。本文提出了一种新颖且灵活的骨干框架——CBNet,该框架利用现有的开源预训练骨干网络,在预训练-微调范式下构建高…...
k8s中PAUSE容器与init容器比较 local卷与hostpath卷比较
目录 一、PAUSE容器与INIT容器比较 1. Pause 容器 作用 特点 示例 2. Init 容器 作用 特点 示例 3. Pause 容器 vs Init 容器 4. 总结 这两个哪个先启动呢? 详细启动顺序 为什么 Pause 容器最先启动? 示例 总结 二、local卷与hostpath卷…...
施耐德PLC仿真软件Modbus tcp通讯测试
安装仿真软件:EcoStruxure™ Control Expert - PLC 仿真器 下载地址:https://www.schneider-electric.cn/zh/download/document/EIO0000001719/ 配置CPU: 切换至仿真模式,系统托盘中出现仿真器图标 新建变量test,地址…...
TCP、UDP协议的应用、ServerSocket和Socket、DatagramSocket和DatagramPacket
DAY13.1 Java核心基础 TCP协议 TCP 协议是面向连接的运算层协议,比较复杂,应用程序在使用TCP协议之前必须建立连接,才能传输数据,数据传输完毕之后需要释放连接 就好比现实生活中的打电话,首先确保电话打通了才能进…...
【HarmonyOS Next】常见的字节转换
【HarmonyOS Next】常见的字节转换 字节转换、位运算在实际开发中具有广泛的应用价值,特别是在处理字节级数据时发挥着重要作用。例如,在网络通信中用于大小端序转换,在数据解析时进行位提取操作。这些特性使得位运算在USB通信、蓝牙&#x…...
Redis-锁-商品秒杀防止超卖
一、秒杀(Seckill) 1. 定义 秒杀:短时间内(如1秒内)大量用户同时抢购 限量低价商品 的营销活动。典型场景:双11热门商品抢购、小米手机首发、演唱会门票开售。 2. 技术挑战 挑战点说明后果…...
RHCE(RHCSA复习:npm、dnf、源码安装实验)
七、软件管理 7.1 rpm 安装 7.1.1 挂载 [rootlocalhost ~]# ll /mnt total 0 drwxr-xr-x. 2 root root 6 Oct 27 21:32 hgfs[rootlocalhost ~]# mount /dev/sr0 /mnt #挂载 mount: /mnt: WARNING: source write-protected, mounted read-only. [rootlocalhost ~]# [rootlo…...
KNN算法性能优化技巧与实战案例
KNN算法性能优化技巧与实战案例 K最近邻(KNN)在分类和回归任务中表现稳健,但其计算复杂度高、内存消耗大成为IT项目中的主要瓶颈。以下从 算法优化、数据结构、工程实践 三方面深入解析性能提升策略,并附典型应用案例。 一、核心性…...
安装并使用anaconda(宏观版)
conda安装 windows 安装 1 官网下载-下载地址 2 配置环境 - 安装目录 bin,script 三个填入环境变量(windows “系统属性” -> “高级系统设置” -> “环境变量” ) 这些值可以被运行在操作系统上的程序使用。它是一个通用的概念,在不同的操作系统和应用程序…...
Qwen2.5-VL 开源视觉大模型,模型体验、下载、推理、微调、部署实战
一、Qwen2.5-VL 简介 Qwen2.5-VL,Qwen 模型家族的旗舰视觉语言模型,比 Qwen2-VL 实现了巨大的飞跃。 欢迎访问 Qwen Chat (Qwen Chat)并选择 Qwen2.5-VL-72B-Instruct 进行体验。 1. 主要增强功能 1)直观地理解事物&…...
【sql靶场】第18-22关-htpp头部注入保姆级教程
目录 【sql靶场】第18-22关-htpp头部注入保姆级教程 1.回顾知识 1.http头部 2.报错注入 2.第十八关 1.尝试 2.爆出数据库名 3.爆出表名 4.爆出字段 5.爆出账号密码 3.第十九关 4.第二十关 5.第二十一关 6.第二十二关 【sql靶场】第18-22关-htpp头部注入保姆级教程…...
SpringBoot实现发邮件功能+邮件内容带模版
发送简单邮件模版邮件 1.pom引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId><version>2.5.13</version></dependency><dependency><groupId&…...
C# NX二次开发:矩形阵列和线性阵列等多种方法讲解
大家好,今天讲一些关于阵列相关的UFUN函数。 UF_MODL_create_linear_iset (view source):这个函数为创建矩形阵列。 intmethodInputMethod: 0 General 1 Simple 2 Identicalchar *number_in_xInputNumber in XC direction.char *distance_xInputSpac…...
OpenBMC:BmcWeb添加路由1 getParameterTag
BmcWeb对于路由的设计其实是参考了Crow BMCWEB_ROUTE(app, "/upload/image/<str>").privileges({{"ConfigureComponents", "ConfigureManager"}}).methods(boost::beast::http::verb::post, boost::beast::http::verb::put)([](const cro…...
【Android性能】Systrace分析
1,分析工具 1,Systrace新UI网站 Perfetto UI 2,Systrace抓取 可通过android sdk中自带的systrace抓取,路径一般如下,..\AppData\Local\Android\Sdk\platform-tools, 另外需要安装python2.7,…...
多种语言请求API接口方法
在当今的互联网世界中,应用程序编程接口(API)扮演着至关重要的角色,它们允许不同的服务和应用程序之间进行数据交换和功能共享。无论是获取天气预报、社交媒体数据还是进行支付操作,API都是背后的关键。不同的编程语言…...
【css酷炫效果】纯CSS实现瀑布流加载动画
【css酷炫效果】纯CSS实现瀑布流加载动画 缘创作背景html结构css样式完整代码基础版进阶版(无限往复加载) 效果图 想直接拿走的老板,链接放在这里:https://download.csdn.net/download/u011561335/90492012 缘 创作随缘,不定时更新。 创作…...
【第15届蓝桥杯】软件赛CB组省赛
个人主页:Guiat 归属专栏:算法竞赛真题题解 文章目录 A. 握手问题(填空题)B. 小球反弹(填空题)C. 好数D. R格式E. 宝石组合F. 数字接龙G. 爬山H. 拔河 正文 总共8道题。 A. 握手问题(填空题&…...
20242817李臻《Linux⾼级编程实践》第四周
20242817李臻《Linux⾼级编程实践》第4周 一、AI对学习内容的总结 第5章 Linux进程管理 5.1 进程基本概念 进程与程序的区别 程序:静态的二进制文件(如/bin/ls),存储在磁盘中,不占用运行资源。进程:程…...
【AI大模型】提示词(Prompt)工程完全指南:从理论到产业级实践
【AI大模型】提示词(Prompt)工程完全指南:从理论到产业级实践 一、Prompt 提示词介绍:AI的“密码本” 1. Prompt的底层定义与价值 本质:Prompt是人与AI模型的“协议语言”,通过文本指令激活模型的特定推理…...