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

mysql的增删查改(进阶)

目录

一.  更复杂的新增

 二. 查询

2.1 聚合查询

COUNT

SUM

AVG

MAX

 MIN

2.1.2 分组查询  group by 子句

 2.1.3 HAVING

 2.2 联合查询/多表查询

 2.2.1 内连接

2.2.2 外连接

2.2.3 全外连接

2.2.4 自连接

 2.2.5 子查询

2.2.6 合并查询


一.  更复杂的新增

将从表名查询到的结果插入到表名2中

insert into 表名2 select .. from 表名1 ...;

创建一个学生表:

创建一个学生表2, 将学生表中的数据加到学生表2中:

 注意: 列的类型可以匹配即可插入, 列名和列的类型不一定要完全一致

 二. 查询

2.1 聚合查询

前面谈到的"表达式查询", 是针对列和列之间的运算, 聚合查询, 就是针对行和行之间的运算

对于行之间的运算, sql中提供了"聚合函数" 来完成这里的运算, 相当于是"库函数"

COUNT

存在这样的表:

此时, 得到了表的全部行的数量

当前这个写法, 就相当于先执行了select * from exam_result, 再对结果进行count聚合

如果写具体的列, 就是针对这一列的结果进行聚合:

 发现结果不同, 因为chinese有个空行

结论: 针对某一列进行聚合的时候, 只关注这一列有多少非NULL的结果 而针对*进行聚合时, 则不再是否非NULL, 全部都记录

如果在count和( )之间加个空格, 就会报错

SQL语言大部分情况下对于空格和换行都是很有好的, 但是聚合函数的函数名和括号之间, 不能有空格

SUM

相当于先执行了select chinese from exam_result, 再对结果进行sum聚合

括号中写表达式也可以:

 相当于先执行了select chinese+math+english from exam_result, 再对结果进行sum聚合

也可以进行带有别名:

但不能把别名写在括号中:

能用sum(*) 吗?

显然不可以

聚合函数中count(*) 其实是一种特殊情况, 只是单纯的统计行数

sum和其他的聚合函数, 涉及到相加或其他计算, 语义上没有明确定义, 不能用sum(*)

针对非数值的列, 进行加和, 虽然不会报错, 但是结果是不正确的, 会报警告:

使用show warnings;  可以查看警告

数据库试图将name转换成double类型(因为SQL是弱类型语言), 但是失败了

但是如果虽然是varchar类型, 但是你赋值为'1''2''3', 那也是可以相加的, 因为可以进行类型转换

AVG

MAX

 MIN

2.1.2 分组查询  group by 子句

指定某个列, 针对这个列, 把值相同的行, 分到同一个组中, 在针对每个组, 分别进行聚合查询 

添加一个表:

查询每个角色下有几个人:

 执行顺序:

  1.  先执行 select role,id from emp
  2.  再根据group by role 设定, 按照role这一列的值, 针对上述查询结果, 进行分组
    分成服务员一组, 游戏陪玩一组, 游戏角色一组, 董事长一组
  3.  针对上面的组, 分别执行count聚合操作
  4.  将上面的结果整理成临时表, 返回给客户端即可

最终结果的临时表, 这几个分组的顺序谁先谁后可不一定!!

可以针对聚合后的结果进行排序, 而不是干预每个分组中数据的先后顺序:

注意: 使用 GROUP BY 进行分组查询时,SELECT 指定的字段必须是分组依据字段,即group by 后面的列, 其他字段若想出现在SELECT 中则必须包含在聚合函数中。

如果这么写:

每个显示的结果, 都是每个分组中的其中一条记录, 但是由于分组之后, 顺序是不确定的, 当前你这里显示的是哪行, 是不确定的, 存在一定的"随机性", 因此就没有意义

 2.1.3 HAVING

给聚合查询指定条件:

1) 聚合之前的条件

查询每个岗位的平均工资, 但是刨除"马云"

where写在group by 前面

2) 聚合之后的条件

查询每个岗位的平均工资, 但刨除平均工资超过10000的数据

此时, 筛选聚合之后的条件, 就不能用where, 需要用having:

此时having放在group by 后面 

当然, 一个sql中, 上述两种条件, 都可以存在:

计算每个岗位的平均工资, 刨除"马云", 也刨除平均工资超过10000的:

 2.2 联合查询/多表查询

上面介绍的都是单表查询

想要学习多表查询, 我们先要了解一下"笛卡尔积"的概念

笛卡尔积, 就是得到了一个更大的表, 列数, 是原来两个表列数的和, 行数, 是原来两个表列数的积

在sql中, 我们很方便通过select 完成笛卡尔积:

先创建两个表student 和 class

笛卡尔积:

但是, 笛卡尔积是全排列的过程, 穷举出了所有的可能性, 自然就会产生以下不符合实际的情况的数据, 例如上述笛卡尔积中, classId只有一个, 只有相同的才是有效数据

那么我们可以加上条件: 

这样写, 会产生二义性, 因为两个列名是相等的, 那么我们可以通过 表名. 列名 的方式访问各自的列

 这个就是多表查询/联合查询的sql

像 where student.classId = class.classId 这种专门用来筛选出有效数据的条件, 也称为"连接条件", 上述多表查询的操作, 也可以称为"连接操作".

创建四张表:

1) 查询'许仙'同学的成绩

第一步: 先确定要查询的信息来自哪些表

许仙同学的名字在学生表中, 成绩在分数表中, 所以要针对学生表和分数表进行联合查询

第二步: 针对这两个表进行笛卡尔积

学生表是8条记录, 分数表是20条记录, 笛卡尔积应该有160条记录

第三步: 加上连接条件, 去掉无效数据

第四步: 再根据题目, 补充其他的条件

第五步: 去掉不必要的列

因为题目要求只要许仙的成绩

2) 使用join ... on  多表查询的另一种写法

第一步: 确认信息来自学生表和分数表

第二步: 笛卡尔积(用join实现笛卡尔积)

第三步: 指定连接条件(用on 代替where)

 第四步: 补充其他条件

第五步: 保留必要列, 去掉其他列

3) 查询所有同学的总成绩

第一步: 信息出自学生表 分数表

第二步: 学生表和分数表进行笛卡尔积

第三步: 指定连接条件

第四步: 添加其他条件, 此处需要添加聚合操作, 按照学生的姓名进行分组

 4) 列出同学的成绩, 课程的名字, 课程的成绩

第一步: 信息来自三个表, 学生表, 课程表, 分数表

第二步: 笛卡尔积

第三步: 指定连接条件

第四步: 对列进行精简

针对多张表查询, 使用join on 可读性更好

 2.2.1 内连接

上述我们所有的链接都是内连接 

select * from 表1,表2 where 连接条件

select * from 表1 (inner) join 表2 on 连接条件

2.2.2 外连接

select * from 表1 left/right join 表2 on 条件....;

注意: 只能使用join ..on.., 在join的前面加上left / right 关键字, 表示"左外连接" 和 "右外连接"

 外连接和内连接一样, 也是基于笛卡尔积的方式来计算的, 但是对于空值/不存在的值, 处理方式是存在区别的

1)对于数据"一一对应"的情况

对于学生表和分数表,
任何一个学生数据, 都能在分数表中找到分数结果
任何一个分数结果, 也能在学生表中找到名字信息

此时, 进行内连接和外连接, 效果是一样的

  简单创建两张表:

内连接:

外连接:

2)对于数据"非一一对应"的情况 

 如果我们对上述数据进行调整:

此时, wangwu的分数信息, 在分数表中不存在了
分数表中, id为4的信息, 在学生表中也不存在

内连接:

此时, 得到的结果, 是包含在两个表中都有的数据

左外连接:

对于左外连接, 以左侧的表为基准, (写作student left join score, 此时student就是左侧表, score就是右侧表), 保证左侧表中的每一个数据, 都会存在, 左侧表数据在右侧表不存在的列, 会用null填充

右外连接:

右外连接与左外连接类似, 以右侧表为基准, 使右表中的每个数据都存在, 对应坐标中不存在的数据都用null填充

2.2.3 全外连接

结合左连接和右连接

站在集合的角度看待上述几种链接:

2.2.4 自连接

同一个表, 自己和自己计算笛卡尔积

例:
还是使用上面的表

显示所有"计算机原理"成绩比"java"成绩高的成绩信息


我们想要比较的是同一个学生的3号课程比1号课程成绩高的数据, 发现我们要比较的score在不同的行中, 之前我们进行的各种条件查询, 都是基于列和列之间的比较, 聚合函数时行和行之间的运算, 没法进行行和行之间的比较, 这时我们就要想办法将行和行之间的关系, 转化成列和列之间的关系, 此时, 自连接就出现了

当我们直接进行自连接时, 发现会报错:

此时我们要给表起个别名:

继续添加条件:

 2.2.5 子查询

把多个sql嵌套成了一个sql

1) 单行子查询: 返回一行记录的查询

查询"不想毕业"同学的同班同学:

先知道"不想毕业"同学的班级, 再去找同班同学

子查询:

将得出的单条记录直接用sql语句代替

2)多行子查询: 返回多条记录的子查询 用in关键字

查询"语文"或"英文"课程的成绩信息:

先知道"语文"或"英文"的课程id, 再去找成绩:
 

子查询:


用in()来圈定范围

2.2.6 合并查询

把多个查询结果合并到一起, 使用union关键字

查询id<3,或者名字为"英文"的课程

 另外, union允许从不同的表分别查询, 只要每个表查询的结果集合列的类型和列的个数匹配, 都能合并, 列的名字无所谓, 但是or只能针对一个表

union在合并是会自动去重, 如果不想要去重操作, 可以使用union all

相关文章:

mysql的增删查改(进阶)

目录 一. 更复杂的新增 二. 查询 2.1 聚合查询 COUNT SUM AVG MAX MIN 2.1.2 分组查询 group by 子句 2.1.3 HAVING 2.2 联合查询/多表查询 2.2.1 内连接 2.2.2 外连接 2.2.3 全外连接 2.2.4 自连接 2.2.5 子查询 2.2.6 合并查询 一. 更复杂的新增 将从表名查询到…...

九、从0开始卷出一个新项目之瑞萨RZN2L生产烧录固件(jflash擦写读外挂flash)

目录 七、生产烧录固件(jflash擦/写/读外挂flash) 7.1 flash母片读写 7.2 jflash擦/写/读外挂flash 九、从0开始卷出一个新项目之瑞萨RZN2L 七、生产烧录固件(jflash擦写读外挂flash) 七、生产烧录固件(jflash擦/写/读外挂flash) 7.1 flash母片读写 略 7.2 jflash擦/写/读…...

安徽某高校数据挖掘作业4-5 (与一些碎碎念)

1. 编写程序求函数、、的极限。 解答&#xff1a; import sympy as sp# 定义符号变量 x x sp.symbols(x)# 定义函数 f1 sp.sin(20 * x) / x f2 (1 4 * x)**(2 / x) f3 (1 4 / x)**(2 * x)# 计算极限 limit1 sp.limit(f1, x, 0) limit2 sp.limit(f2, x, 0) limit3 sp…...

基于ES安装IK分词插件

前言 IK分词器插件是为Elasticsearch设计的中文分词插件&#xff0c;由Elasticsearch的官方团队之外的开发者medcl开发。它主要针对中文文本的分词需求&#xff0c;提供了较为准确的中文分词能力。以下是IK分词器插件的一些特点&#xff1a; 智能分词&#xff1a;IK分词器采用基…...

php项目加密源码

软件简介 压缩包里有多少个php就会被加密多少个PHP、php无需安装任何插件。源码全开源 如果上传的压缩包里有子文件夹&#xff08;子文件夹里的php文件也会被加密&#xff09;&#xff0c;加密后的压缩包需要先修复一下&#xff0c;步骤&#xff1a;打开压缩包 》 工具 》 修…...

测绘GIS和遥感领域比较好的公众号有哪些

测绘GIS和遥感领域&#xff0c;微信公众号作为信息传播和知识分享的重要渠道&#xff0c;为从业者提供了一个快速获取行业动态、技术进展和职业发展机会的平台。分享一些在测绘GIS和遥感领域表现突出的公众号推荐&#xff1a; 1. 慧天地&#xff1a;慧天地是一个知名的测绘公众…...

【技术实操】银河高级服务器操作系统实例分享,达梦数据库服务器 oom 问题分析

1. 服务器环境以及配置 【 机型】 处理器&#xff1a; HUAWEIKunpeng 920 5220 内存&#xff1a; 400518528 kB 主板型号&#xff1a; Chaoqiang K620 series 整机类型/架构&#xff1a; ARM BIOS 版本&#xff1a; KL4.41.028.TF.220224.R 固件版本&#xff1a; KL4.41…...

通过ffmpeg 将wav格式转为mp3格式.

通过ffmpeg实现将wav转为mp3格式.需要下载一个ffmpeg放到执行文件所在目录. 我ffmpeg的下载地址为:ffmpeg.exe下载-ffmpeg.exe32&#xff06;64位下载免费版-旋风软件园 use ShellAPI; {$R *.dfm}procedure ConvertWavToMp3(const InputFile, OutputFile: string); varExecu…...

快速上手RabbitMQ,直接上开发!

一 直接使用Rabbit MQ 在Java项目中使用Rabbit MQ可以通过引入Rabbit MQ的客户端Maven依赖&#xff0c;和Rabbit MQ建立连接进行通信。这种就属于是直接使用Rabbit MQ。 基本使用 创建连接后&#xff0c;使用channel向交换机发送消息 public class Producer {private final s…...

如何实现单例模式及不同实现方法分析-设计模式

这是 一道面试常考题&#xff1a;&#xff08;经常会在面试中让手写一下&#xff09; 什么是单例模式 【问什么是单例模式时&#xff0c;不要答非所问&#xff0c;给出单例模式有两种类型之类的回答&#xff0c;要围绕单例模式的定义去展开。】 单例模式是指在内存中只会创建…...

wampserver安装与汉化

wampserver安装与汉化 文章目录 wampserver安装与汉化一、安装二、汉化1.升级软件并安装补丁 介绍&#xff1a; WampServer是一款由法国人开发的Apache Web服务器、PHP解释器以及MySQL数据库的整合软件包。免去了开发人员将时间花费在繁琐的配置环境过程&#xff0c;从而腾出更…...

解决MyBatis的N+1问题

解决MyBatis的N1问题 N1问题通常出现在一对多关联查询中。当我们查询主表数据&#xff08;如订单&#xff09;并希望获取关联的从表数据&#xff08;如订单的商品&#xff09;时&#xff0c;如果每获取一条主表记录都要执行一次从表查询&#xff0c;就会产生N1次查询的问题。假…...

12-学生们参加各科测试的次数(高频 SQL 50 题基础版)

12-学生们参加各科测试的次数 -- 学生表中&#xff0c;id是唯一的&#xff0c;将他作为主表 -- CROSS JOIN产生了一个结果集&#xff0c;该结果集是两个关联表的行的乘积 -- 2行表,与3行表使用cross join,得到2*36行数据 select st.student_id, st.student_name,su.subject_na…...

2024网络与信息安全管理员职工职业技能竞赛re0220164094

main部分&#xff0c;就是要逆这部分shellcode&#xff0c;程序把data段里面的东西复制到bss段去执行&#xff0c;期间包含解码操作。 v19 0;puts("Please input your flag: ");__isoc99_scanf("%s", s);if ( strlen(s) ! 38 ){puts("Wrong length!&…...

Elasticsearch--easy-ES框架使用,轻松操作查询Elasticsearch,简化开发

Easy-Es&#xff08;简称EE&#xff09;是一款基于ElasticSearch(简称Es)官方提供的RestHighLevelClient打造的ORM开发框架&#xff0c;在 RestHighLevelClient 的基础上,只做增强不做改变&#xff0c;为简化开发、提高效率而生,您如果有用过Mybatis-Plus(简称MP),那么您基本可…...

【教程】如何实现WordPress网站降级(用于解决插件和主题问题)

在最新可用版本上运行WordPress安装、插件和主题是使用该平台的关键最佳实践。还建议使用最新版本的PHP。但是,在某些情况下,这是不谨慎或不可能的。 如果您发现自己处于这种情况,您可能需要撤消更新并降级您的WordPress网站(或其中的一部分)。幸运的是,有一些方法可用于…...

思维导图-vb.net开发带进度条的复制文件夹功能c#复制文件夹

你们谁写代码会用流程图来做计划&#xff0c;或者写项目总结报告&#xff1f; .net带进度条复制文件夹 方案 列出所有子文件夹&#xff0c;再创建&#xff0c;复制文件 大文件可以单独做进度条 缺点&#xff1a;设计会更复杂 直接…...

Linux文本处理三剑客之awk命令

官方文档&#xff1a;https://www.gnu.org/software/gawk/manual/gawk.html 什么是awk&#xff1f; Awk是一种文本处理工具&#xff0c;它的名字是由其三位创始人&#xff08;Aho、Weinberger和Kernighan&#xff09;的姓氏首字母组成的。Awk的设计初衷是用于处理结构化文本数…...

公差和配合

配合的选择&#xff1a; 配合特性以及基本偏差的应用&#xff1a; 常用优先配合特性及选用举例 为什么一般情况下选用基孔制而不用基轴制&#xff1a; 优先采用基孔制的原因主要包括工艺性、经济性和标准化&#xff1a; 工艺性。加工孔比加工轴更难&#xff0c;因为孔…...

AI大模型应用开发实践:5.快速入门 Assistants API

快速入门 Assistants API Assistants API 允许您在自己的应用程序中构建人工智能助手。一个助手有其指令,并可以利用模型、工具和知识来回应用户查询。 Assistants API 目前支持三种类型的工具: 代码解释器 Code Interpreter检索 Retrieval函数调用 Function calling使用 P…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...