【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

Neo4j 知识讲解与在线工具使用教程

图数据库领域的核心工具 ——Neo4j,同时详细拆解其在线预览控制台(https://console-preview.neo4j.io/)的使用方法,以及查询工具(https://console-preview.neo4j.io/tools/query)的模块功能。 一、Neo4j 核心知识铺垫 在使用工具前,我们需要先理解 Neo4j 的本质和核心概念,这是后续操作的基础。 1. 什么是 Neo4j? Neo4j 是世界上最流行的原生图数据库(Native Graph Database),专门用于存储、查询和分析 “实体之间的关联关系”。它与我们熟悉的 MySQL 等关系型数据库的核心差异的是: * 关系型数据库(MySQL):用 “表 + 行 + 外键” 间接表示关联,查询多表关联时需频繁 JOIN,效率低; * 图数据库(Neo4j)

By Ne0inhk
【无人机】无人机路径规划算法

【无人机】无人机路径规划算法

目录 一、引言:无人机与路径规划算法 二、路径规划算法基础 (一)定义与重要性 (二)规划目标与约束条件 三、常见路径规划算法详解 (一)A * 算法 (二)Dijkstra 算法 (三)RRT(快速扩展随机树)算法 (四)蚁群算法 四、算法应用实例与效果展示 (一)不同场景下的算法应用 (二)算法性能对比数据 五、算法的优化与发展趋势 (一)现有算法的优化策略 (二)结合新技术的发展方向 六、挑战与展望 (一)面临的技术挑战 (二)未来应用前景 七、结论 一、引言:无人机与路径规划算法 在科技飞速发展的今天,无人机作为一种极具创新性的技术产物,已深度融入我们生活的方方面面,

By Ne0inhk

简单理解:单片机怎么和FPGA通信

了解单片机与 FPGA 之间的通信方式,这是嵌入式系统中非常常见的硬件交互场景,核心是要根据传输速率、硬件资源、开发复杂度选择合适的通信协议。 一、主流通信方式及实现方案 单片机和 FPGA 通信主要分为并行通信和串行通信两大类,下面按从易到难、从低速到高速的顺序介绍: 1. 通用 IO 口(GPIO)自定义协议(最简单) 适合低速、短距离、数据量小的场景(如按键、状态交互),完全自定义通信规则,开发灵活。 * 硬件连接: * 单片机:1 个输出引脚(发送) + 1 个输入引脚(接收) * FPGA:1 个输入引脚(接收) + 1 个输出引脚(发送) * 需共地,建议加 10K 上拉电阻提高稳定性。 * 单片机端(C 语言,

By Ne0inhk