【MySQL】第八节—表的增删改查,吃透这篇就够了(下)

【MySQL】第八节—表的增删改查,吃透这篇就够了(下)

Hi,我是云边有个稻草人-ZEEKLOG博客个人主页,今天结束表的增删改查,继续!

《MySQL》本篇文章所属专栏—持续更新中!
 

目录

三、Update

3.1【将孙悟空同学的数学成绩变更为 80 分】

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

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

3.4【将所有同学的语文成绩更新为原来的 2 倍】

四、Delete

4.1 删除数据

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

【删除总分倒数第一的同学信息】

【删除整张表数据】

4.2 截断表

五、去重数据表,插入查询结果

六、聚合函数

6.1 【统计班级共有多少同学】

6.2 【统计本次考试的数学成绩分数个数】

6.3【统计数学成绩总分】

6.4【统计平均总分】

6.5【返回英语最高分】

6.6【返回 > 70 分以上的数学最低分】

七、group by子句的使用

7.1【如何显示每个部门的平均工资和最高工资】

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

7.3 【显示平均工资低于2000的部门和它的平均工资】

7.4【having 和 where】

八、实战OJ


上节回顾:【MySQL】第七节—表的增删改查,吃透这篇就够了(上)

正文开始——

三、Update

语法:

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

对查询到的结果进行列值更新

案例:

3.1【将孙悟空同学的数学成绩变更为 80 分】
  • -- 更新值为具体值
3.2【将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分】
  • -- 一次更新多个列
3.3【将总成绩倒数前三的 3 位同学的数学成绩加上 30 分】
  • - 更新值为原值基础上变更
3.4【将所有同学的语文成绩更新为原来的 2 倍】

注意:更新全表的语句慎用!

  • -- 没有 WHERE 子句,则更新全表

四、Delete

4.1 删除数据

语法:

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

案例:

【删除孙悟空同学的考试成绩】
【删除总分倒数第一的同学信息】
【删除整张表数据】

注意:删除整表操作要慎用!

MySQL当中的表分为表和表里面的数据,delete删除的是表里面的数据,表的结构不受影响。

清空表的第一种做法:

4.2 截断表

对于删除整表里面的数据这个操作,在效果上和delete是一样的,但是在原理和细节上有差异

语法:

TRUNCATE [TABLE] table_name 

注意:这个操作慎用

  1. 只能对整表操作,不能像 DELETE 一样针对部分数据操作;
  2. 实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是TRUNCATE在删除数据的时候,并不经过真正的事物,所以无法回滚
  3. 会重置 AUTO_INCREMENT 项

【补充】


五、去重数据表,插入查询结果

语法:

支持将 select 的结果直接 insert 插入表里面

INSERT INTO table_name [(column [, column ...])] SELECT ... 

案例:删除表中的的重复记录,重复的数据只能有一份


六、聚合函数

案例:

6.1 【统计班级共有多少同学】
  • -- 使用 * 做统计,不受 NULL 影响

也可以进行重命名操作:

  • -- 使用表达式做统计
6.2 【统计本次考试的数学成绩分数个数】
  • -- COUNT(math) 统计的是全部成绩
  • -- COUNT(DISTINCT math) 统计的是去重成绩数量

count 肯定是对筛选后的结果进行聚合统计,所以我们应该先去重操作,再进行聚合统计,so

6.3【统计数学成绩总分】
  • -- 去重之后的数学成绩的总分
  • -- 不及格 < 60 的总分,没有结果,返回 NULL
  • --数学成绩的平均分
6.4【统计平均总分】

6.5【返回英语最高分】

不能直接找到英语最高分是谁,但是可以用order by结合limit实现

6.6【返回 > 70 分以上的数学最低分】

聚合是有条件的,一定要保证列信息是可被聚合的,一个只属于某一个人的属性是无法与聚合信息相结合的,就比如上面的例子中,最高分和最高分是谁是无法相结合的。

聚合函数在应用层上,更多的是在进行数据统计,接下来学习group by进一步认识聚合函数的应用


七、group by子句的使用

在select中使用group by 子句可以对指定列进行分组查询

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

案例:

  • 准备工作,创建一个雇员信息表(来自oracle 9i的经典测试表)
    • EMP员工表
    • DEPT部门表
    • SALGRADE工资等级表

案例代码,准备工作,根据下面的代码创建对应的库和表:

DROP database IF EXISTS `scott`; CREATE database IF NOT EXISTS `scott` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; USE `scott`; DROP TABLE IF EXISTS `dept`; CREATE TABLE `dept` ( `deptno` int(2) unsigned zerofill NOT NULL COMMENT '部门编号', `dname` varchar(14) DEFAULT NULL COMMENT '部门名称', `loc` varchar(13) DEFAULT NULL COMMENT '部门所在地点' ); DROP TABLE IF EXISTS `emp`; CREATE TABLE `emp` ( `empno` int(6) unsigned zerofill NOT NULL COMMENT '雇员编号', `ename` varchar(10) DEFAULT NULL COMMENT '雇员姓名', `job` varchar(9) DEFAULT NULL COMMENT '雇员职位', `mgr` int(4) unsigned zerofill DEFAULT NULL COMMENT '雇员领导编号', `hiredate` datetime DEFAULT NULL COMMENT '雇佣时间', `sal` decimal(7,2) DEFAULT NULL COMMENT '工资月薪', `comm` decimal(7,2) DEFAULT NULL COMMENT '奖金', `deptno` int(2) unsigned zerofill DEFAULT NULL COMMENT '部门编号' ); DROP TABLE IF EXISTS `salgrade`; CREATE TABLE `salgrade` ( `grade` int(11) DEFAULT NULL COMMENT '等级', `losal` int(11) DEFAULT NULL COMMENT '此等级最低工资', `hisal` int(11) DEFAULT NULL COMMENT '此等级最高工资' ); insert into dept (deptno, dname, loc) values (10, 'ACCOUNTING', 'NEW YORK'); insert into dept (deptno, dname, loc) values (20, 'RESEARCH', 'DALLAS'); insert into dept (deptno, dname, loc) values (30, 'SALES', 'CHICAGO'); insert into dept (deptno, dname, loc) values (40, 'OPERATIONS', 'BOSTON'); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, null, 20); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, null, 20); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, null, 30); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, null, 10); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000, null, 20); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7839, 'KING', 'PRESIDENT', null, '1981-11-17', 5000, null, 10); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7844, 'TURNER', 'SALESMAN', 7698,'1981-09-08', 1500, 0, 30); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7876, 'ADAMS', 'CLERK', 7788, '1987-05-23', 1100, null, 20); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, null, 30); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, null, 20); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, null, 10); insert into salgrade (grade, losal, hisal) values (1, 700, 1200); insert into salgrade (grade, losal, hisal) values (2, 1201, 1400); insert into salgrade (grade, losal, hisal) values (3, 1401, 2000); insert into salgrade (grade, losal, hisal) values (4, 2001, 3000); insert into salgrade (grade, losal, hisal) values (5, 3001, 9999); 

emp表:

dept表:

salgrade表:

7.1【如何显示每个部门的平均工资和最高工资】
7.2【显示每个部门的每种岗位的平均工资和最低工资】
7.3 【显示平均工资低于2000的部门和它的平均工资】

第一步:首先统计各个部门的平均工资(把结果先聚合出来)

第二步:然后having和group by配合使用,对group by结果进行过滤

  • --having经常和group by搭配使用,作用是对分组进行筛选,作用有些像where。
7.4【having 和 where】

SMISH员工不参与统计,显示平均工资低于2000的部门和它的平均工资,在完成这个题目的过程中体会 having 和 where 的区别


八、实战OJ

批量插入数据_牛客题霸_牛客网

找出所有员工当前薪水salary情况_牛客题霸_牛客网

查找最晚入职员工的所有信息_牛客题霸_牛客网

查找入职员工时间升序排名的情况下的倒数第三的员工所有信息_牛客题霸_牛客网

查找薪水记录超过15条的员工号emp_no以及其对应的记录次_牛客题霸_牛客网

获取所有部门当前manager的当前薪水情况,给出dept__牛客题霸_牛客网

从titles表获取按照title进行分组_牛客题霸_牛客网

重复邮件 - LeetCode

大国 - LeetCode

Nth Highest Salary - LeetCode

面试题:

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

下节内置函数

完——


2026年1月10日

至此结束——

我是云边有个稻草人

期待与你的下一次相遇......

Read more

【OpenClaw从入门到精通】第10篇:OpenClaw生产环境部署全攻略:性能优化+安全加固+监控运维(2026实测版)

【OpenClaw从入门到精通】第10篇:OpenClaw生产环境部署全攻略:性能优化+安全加固+监控运维(2026实测版)

摘要:本文聚焦OpenClaw从测试环境走向生产环境的核心痛点,围绕“性能优化、安全加固、监控运维”三大维度展开实操讲解。先明确生产环境硬件/系统选型标准,再通过硬件层资源管控、模型调度策略、缓存优化等手段提升响应速度(实测响应效率提升50%+);接着从网络、权限、数据三层构建安全防护体系,集成火山引擎安全方案拦截高危操作;最后落地TenacitOS可视化监控与Prometheus告警体系,配套完整故障排查清单和虚拟实战案例。全文所有配置、代码均经实测验证,兼顾新手入门实操性和进阶读者的生产级部署需求,帮助开发者真正实现OpenClaw从“能用”到“放心用”的跨越。 优质专栏欢迎订阅! 【DeepSeek深度应用】【Python高阶开发:AI自动化与数据工程实战】【YOLOv11工业级实战】 【机器视觉:C# + HALCON】【大模型微调实战:平民级微调技术全解】 【人工智能之深度学习】【AI 赋能:Python 人工智能应用实战】【数字孪生与仿真技术实战指南】 【AI工程化落地与YOLOv8/v9实战】【C#工业上位机高级应用:高并发通信+性能优化】 【Java生产级避坑指南:

By Ne0inhk
ARM Linux 驱动开发篇--- Linux 并发与竞争实验(互斥体实现 LED 设备互斥访问)--- Ubuntu20.04互斥体实验

ARM Linux 驱动开发篇--- Linux 并发与竞争实验(互斥体实现 LED 设备互斥访问)--- Ubuntu20.04互斥体实验

🎬 渡水无言:个人主页渡水无言 ❄专栏传送门: 《linux专栏》《嵌入式linux驱动开发》《linux系统移植专栏》 ❄专栏传送门: 《freertos专栏》《STM32 HAL库专栏》 ⭐️流水不争先,争的是滔滔不绝  📚博主简介:第二十届中国研究生电子设计竞赛全国二等奖 |国家奖学金 | 省级三好学生 | 省级优秀毕业生获得者 | ZEEKLOG新星杯TOP18 | 半导纵横专栏博主 | 211在读研究生 在这里主要分享自己学习的linux嵌入式领域知识;有分享错误或者不足的地方欢迎大佬指导,也欢迎各位大佬互相三连 目录 前言  一、实验基础说明 1.1、互斥体简介 1.2 本次实验设计思路 二、硬件原理分析(看过之前博客的可以忽略) 三、实验程序编写 3.1 互斥体 LED 驱动代码(mutex.c) 3.2.1、设备结构体定义(28-39

By Ne0inhk
Flutter for OpenHarmony:swagger_dart_code_generator 接口代码自动化生成的救星(OpenAPI/Swagger) 深度解析与鸿蒙适配指南

Flutter for OpenHarmony:swagger_dart_code_generator 接口代码自动化生成的救星(OpenAPI/Swagger) 深度解析与鸿蒙适配指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 后端工程师扔给你一个 Swagger (OpenAPI) 文档地址,你会怎么做? 1. 对着文档,手写 Dart Model 类(容易写错字段类型)。 2. 手写 Retrofit/Dio 的 API 接口定义(容易拼错 URL)。 3. 当后端修改了字段名,你对着报错修半天。 这是重复劳动的地狱。 swagger_dart_code_generator 可以将 Swagger (JSON/YAML) 文件直接转换为高质量的 Dart 代码,包括: * Model 类:支持 json_serializable,带 fromJson/

By Ne0inhk
Linux 开发别再卡壳!makefile/git/gdb 全流程实操 + 作业解析,新手看完直接用----《Hello Linux!》(5)

Linux 开发别再卡壳!makefile/git/gdb 全流程实操 + 作业解析,新手看完直接用----《Hello Linux!》(5)

文章目录 * 前言 * make/makefile * 文件的三个时间 * Linux第一个小程序-进度条 * 回车和换行 * 缓冲区 * 程序的代码展示 * git指令 * 关于gitee * Linux调试器-gdb使用 * 作业部分 前言 做 Linux 开发时,你是不是也遇到过这些 “卡脖子” 时刻?写 makefile 时,明明语法没错却报错,最后发现是依赖方法行没加 Tab;想提交代码到 gitee,记不清 git add/commit/push 的 “三板斧”,还得反复搜教程;用 gdb 调试程序,输了命令没反应,才想起编译时没加-g生成 debug 版本;甚至连写个进度条,都搞不懂\r和\n的区别,导致进度条乱跳…… 其实这些问题,

By Ne0inhk