MySQL之基本查询(二)(update || delete || 聚合函数 || group by)

目录

一、表的更新update

二、表的删除delete

三、聚合函数

四、group by 分组查询


一、表的更新update

语法:

UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]

使用实列:

~ 将孙悟空同学的数学成绩变更为 80 分

update exam_result set math=80 where name='孙悟空';

原先分数:

更改后分数:

~ 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分

mysql> update exam_result set math=60, chinese=70 where name='曹孟德';

 原先分数:

更改后分数:

~ 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分

对于这个问题,我们可以先拿到总成绩倒数前三的3位同学的总成绩和数学成绩:

select name,math,chinese+math+english total from exam_result order by total limit 3;

上图显示出来的数据其实也是一张表,我们可以对该表进行数据修改:

update exam_result set math=math+30 order by chinese + math + english limit 3;

 

注:如果没有筛选条件,update将进行整表更新。 

二、表的删除delete

删除数据

语法:

DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

 使用实例:

~  删除孙悟空同学的考试成绩

mysql> delete from exam_result where name='孙悟空';

删除前的数据:

删除后数据:

~ 删除总分第一名的同学的考试成绩

mysql> delete from exam_result order by chinese+math+english desc limit 1;

原先数据:总分第一名是猪悟能,所以我们需要删除他的成绩。

删除后的数据:

 删除表的所有数据

我们先创建一张用于测试的表:

mysql> CREATE TABLE for_delete (-> id INT PRIMARY KEY AUTO_INCREMENT,-> name VARCHAR(20)-> );

然后插入测试数据:

INSERT INTO for_delete (name) VALUES ('A'), ('B'), ('C');

 

然后删除表的所有数据,并查看:

mysql> delete from for_delete;

我们查看一下创建语句:

mysql> show create table for_delete\G;

 

我们发现,auto_increment是4,那么如果我们再插入一条新的数据:自增 id 在原值上增长

INSERT INTO for_delete (name) VALUES ('D');

 

查看表结构,会有 AUTO_INCREMENT项: 

所以,对于delete清空表数据的方式,其不会清空AUTO_INCREMENT的值。

截断表

语法:

TRUNCATE [TABLE] table_name;

注:这个操作慎用,其特点如下,

1、只能对整表操作,不能像 DELETE 一样可以针对部分数据操作,即只能用于清空表的所有的数据。

2、实际上 TRUNCATE 不对数据操作,所以比 DELETE 更快,但是TRUNCATE在删除数据的时候,并不经过真正的事务,所以无法回滚。

3、会重置 AUTO_INCREMENT 项。

我们先创建一个测试表:

CREATE TABLE for_truncate (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20)
);

插入一些测试数据:

然后,查看一下该表的创建语句:auto_increment是4。

接着,我们截断整表数据,注意影响行数是 0,所以实际上没有对数据真正操作:

然后,查看一下该表截断后的创建语句:auto_increment已经被清空了。

然后,向表中插入一条新的数据:

再查看一下该表的创建语句:auto_increment是2。

注:delete和truncate都是对表中的数据进行操作。所以数据没了,但是表任然存在。 

三、聚合函数

聚合函数可以对一组值执行计算并返回单一的值。

函数说明
COUNT([DISTINCT] expr)返回查询到的数据的数量
SUM([DISTINCT] expr)返回查询到的数据的总和,不是数字没有意义
AVG([DISTINCT] expr)返回查询到的数据的平均值,不是数字没有意义
MAX([DISTINCT] expr)返回查询到的数据的最大值,不是数字没有意义
MIN([DISTINCT] expr)返回查询到的数据的 最小值,不是数字没有意义

使用实例:

下面的所有操作和结果均来源下表:

~ 统计班级共有多少同学

mysql> select count(*) from exam_result;

~ 统计数学成绩总分

mysql> select sum(math) from exam_result;

~ 统计数学成绩平均分

mysql> select avg(math) from exam_result;

~ 返回英语成绩的最高分

mysql> select max(english) from exam_result;

~ 返回 < 70 分以下的数学成绩的最低分

mysql> select min(math) from exam_result where math<70;

四、group by 分组查询

在select中使用group by 子句可以对指定列进行分组查询。分组的目的是为了进行分组之后,方便进行聚合统计。

语法:

select column1, column2, .. from table group by column;

使用实例

首先,创建一个雇员信息表(来自Oracle 9i的经典测试表):EMP员工表,DEPT部门表,SALGRADE工资等级表。

~ 显示每个部门的平均工资和最高工资

select deptno,avg(sal) 平均工资,max(sal) 最高工资 from emp group by deptno;

 

所以说,分组统计的本质,就是把一组按照条件拆成了多个组,然后进行各自组内的统计。即分组就是,把一张表按照条件在逻辑上拆成了多个子表,然后分别对各自的子表进行聚合统计。

~ 显示每个部门的每种岗位的平均工资和最低工资

首先,我们分析一下需求,我们需要的数据是平均工资和最低工资,这个可以使用函数avg和min,来实现。限制条件就是,我们需要根据部门和岗位进行分组,可以使用group by。

mysql> select deptno,job,avg(sal),min(sal) from emp group by deptno,job;

~ 显示平均工资低于2000的部门和它的平均工资

首先,我们分析一下需求,我们需要根据部门分组后,得到部门的平均工资。

mysql> select deptno,avg(sal) from emp group by deptno;

然后,我们需要根据分组聚合的结果,进行筛选,显示平均工资低于2000的部门和它的平均工资。

select deptno,avg(sal) mysal from emp group by deptno having mysal<2000;

注:其中,having是对聚合统计后的数据,进行条件筛选。

having 和 where 

两者区别:条件筛选的阶段是不同的。

where——对具体的任意列进行条件筛选。

having——对分组聚合之后的数据结果进行条件筛选。

注:SQL查询中各个关键字的执行先后顺序,from > on> join > where > group by > with > having > select > distinct > order by > limit

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1543467.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Shiro rememberMe反序列化漏洞(Shiro-550) 靶场攻略

漏洞原理 Apache Shiro框架提供了记住密码的功能&#xff08;RememberMe&#xff09;&#xff0c;⽤户登录成功后会⽣成经过 加密并编码的cookie。在服务端对rememberMe的cookie值&#xff0c;先base64解码然后AES解密再反 序列化&#xff0c;就导致了反序列化RCE漏洞。 那么&a…

杀软对抗 ---> Perfect Syscall??

好久没更了&#xff0c;今天想起来更新了&#x1f60b;&#x1f60b;&#x1f60b;&#x1f60b; 目录 1.AV && EDR 2.Perfect Syscall&#xff1f;&#xff1f; 3.Truly Perfect ??? 在开始之前先来展示一下这次的免杀效果 1.AV && EDR 360 天擎EDR …

Redis事务总结

1.事务介绍 Redis 事务是一个用于将多个命令打包在一起执行的功能&#xff0c;它可以确保这些命令按照顺序执行&#xff0c;并且具有原子性。这意味着事务中的命令要么全部执行&#xff0c;要么全部不执行&#xff0c;这有助于保持数据的一致性。 Redis 事务本质&#xff1a;…

教你轻松搞定西门子PLC与三菱PLC之间无线Modbus通讯

自第一台PLC在GM公司汽车生产线上首次应用成功以来&#xff0c;PLC凭借其方便性、可靠性以及低廉的价格得到了广泛的应用。在现代化工厂中&#xff0c;除厂级PLC系统外&#xff0c;还存在很多独立的子系统。比如&#xff0c;各个生产车间的PLC系统、或同一生产车间的不同生产流…

JavaSE高级(3)——lombok、juint单元测试、断言

一、lombok的使用 默认jvm不解析第三方注解&#xff0c;需要手动开启 链式调用 二、juint单元测试 下载juint包 public class TestDemo {// 在每一个单元测试方法执行之前执行Beforepublic void before() {// 例如可以在before部分创建IO流System.out.println("befor…

【大模型实战篇】大模型GPU推理测试(以Qwen2.5-7B为例)

1. 背景介绍 今天到了两块新的3090卡&#xff0c;用nvidia-smi看下部署情况。我们使用Qwen2.5-7B简单做了下推理测试。 3090卡的基本配置信息如下图所示&#xff0c;使用两块卡做成GPU集群&#xff0c;显存有48G&#xff0c;内存带宽936.2 GB/s&#xff0c; 基本上可以应对…

【OpenCV】场景中人的识别与前端计数

1.OpenCV代码设计讲解 突发奇想&#xff0c;搞个摄像头&#xff0c;识别一下实验室里面有几个人&#xff0c;计数一下&#xff08;最终代码是累加计数&#xff0c;没有优化&#xff09;&#xff0c;拿OpenCV来玩一玩 首先&#xff0c;还是优先启动电脑摄像头&#xff0c;本项…

实验十七:串口通信实验

串口通信实验硬件接口图 具体原理可以查看相应的资料和视频 现就代码分享如下; main.c #include<reg52.h>typedef unsigned int u16; typedef unsigned char u8;sbit LED1=P2^0;void delay_10us(u16 n) {while(n--); }int n=0;void delay_ms(u16 ms) {u16 i,j;for(i=…

在线思维导图怎么制作?只需要台这些组合分析法!

思维导图经历了漫长的进化&#xff0c;现已成为信息组织、记忆和头脑风暴的重要工具。其制作方式主要有手绘和软件两种&#xff0c;随着互联网的发展&#xff0c;软件制作因其便捷性和易于保存逐渐占据主导。如今&#xff0c;在线工具使得用户能够免费创建思维导图。本文将以即…

实验十八:IIC-EEPROM实验

这个实验比较复杂,是目前第一个多文件项目 KEY1-4:P3^0-P3^3 IIC_SCL=P2^1; IIC_SDA=P2^0; //定义数码管位选信号控制脚 LSA=P2^2; LSB=P2^3; LSC=P2^4; 代码 main.c #include "public.h" #in

写作文的AI,不妨试试这些工具

写作文的AI&#xff0c;随着人工智能技术的迅猛发展&#xff0c;AI写作软件已经成为许多作家、学生和内容创作者的得力助手。这些软件不仅能帮助用户生成高质量的文章&#xff0c;还能提供创意灵感、语法校正和内容优化等多重功能。下面&#xff0c;本文将介绍五款各具特色的AI…

真正能抵抗裁员的,从不是专业能力,早知道这些都财务自由了

‍‍‍‍前几天跟一位朋友聊起来。 说她在大厂工作接近5年&#xff0c;业绩也不错&#xff0c;本想着再熬几年就回老家发展。没想到&#xff0c;今年公司大幅裁员&#xff0c;项目组直接被连锅端。 本以为不会轮到她了&#xff0c;上午被叫去办公室谈话&#xff0c;签字&…

高温情况下电容器失效的解决措施

在高温环境下&#xff0c;电容器容易出现失效问题&#xff0c;这不仅会影响设备的正常运行&#xff0c;还可能引发安全隐患。为有效应对高温条件下电容器的失效&#xff0c;需从预防、监测、选择合适的电容器以及维护保养等多个方面入手。以下是详细的解决措施&#xff1a; 一…

男生找女搭子一起旅游的目的,并没有你想象中的那么复杂!

在繁华都市的写字楼里&#xff0c;有一个名叫林宇的男生。最近&#xff0c;他在工作上遭遇了一系列的挫折&#xff0c;项目进展不顺&#xff0c;还被领导批评&#xff0c;心情郁闷到了极点。 为了排解心中的烦闷&#xff0c;林宇决定出去旅游。但他不想一个人孤单地踏上旅程&am…

彻底掌握Android中的ViewModel

彻底掌握Android中的ViewModel ViewModel 属于Android Jetpack库的一部分&#xff0c;是一种业务逻辑或屏幕状态容器。它提供了在配置更改&#xff08;如屏幕旋转&#xff09;后依旧保留相应状态的特性&#xff0c;帮助开发者以更加清晰和可维护的方式处理UI相关的数据&#x…

【中级通信工程师】终端与业务(二):终端产品

【零基础3天通关中级通信工程师】 终端与业务(二)&#xff1a;终端产品 本文是中级通信工程师考试《终端与业务》科目第二章《终端产品》的复习资料和真题汇总。终端与业务是通信考试里最简单的科目&#xff0c;有效复习通过率可达90%以上&#xff0c;本文结合了高频考点和近几…

产教专家共议数字时代下的数据思维人才培养

8 月 25 日至 26 日&#xff0c;"数据思维人才培养论坛"在大湾区大学松山湖校区圆满落幕。此次论坛作为对两个月前新时代计算机本科教育论坛上相关议题的深化&#xff0c;由中国人民大学杜小勇教授与大湾区大学李晓明教授携手发起。和鲸科技创始人、CEO 范向伟先生受…

【常见框架漏洞】ThinkPHP、struts2、Spring、Shiro

一、ThinkPHP 1.环境配置 靶场:vulhub/thinkphp/5-rcedocker-compose up -d #启动环境 访问靶场:http://ip:8080/index.php2.远程命令执行 执行whoami命令 poc: http://47.121.211.205:8080/index.php?sindex/think\app/invokefunction&functioncall_user_func_array&…

算法【Java】—— 位运算

位运算总结 位运算的运算符&#xff1a;按位与&#xff08;&&#xff09;&#xff0c;按位或&#xff08;|&#xff09;&#xff0c;按位异或&#xff08;^&#xff09;&#xff0c;按位取反&#xff08;~&#xff09;&#xff0c;还有移位操作符 <<&#xff0c;>…

加密与解密-PEiD查壳工具的下载及详细安装过程(附有下载文件)

下载链接在文末 下载压缩包后解压 &#xff01;&#xff01;安装路径不要有中文 解压后得到PEiD文件 双击任意一个即可运行使用 夸克网盘打开&#xff1a; 链接&#xff1a;https://pan.quark.cn/s/1216d81f1af5 提取码&#xff1a;pJ1W 动态分析工具 加密与解密-x32dbg…