
一、Update语法核心注意事项必须加 WHERE 子句若无 WHERE会更新全表数据生产环境慎用支持同时更新多列列之间用逗号分隔支持基于原有值更新如math math 30不支持math 30语法可搭配 ORDER BY、LIMIT 实现精准更新指定条数的数据。对查询结果进行列值更新1.1 将孙悟空同学的数据成绩变更为80分1.2 将曹孟德同学的数学成绩变更为60分语文成绩变更为70分1.3 将总成绩倒数前三的3位同学的数学成绩加上30分1.4 将所有同学的语文成绩更新为原来的2倍没有where 子句 则更新全表 二、Delete删除表中的数据分为删除指定数据和删除全表数据。2.1 删除数据语法2.1.1 删除孙悟空同学的考试成绩必须加 WHERE 子句否则会删除全表数据示例2.1.2 删除整张表的数据注意删除整表操作要慎用自增序列的计数器并不会置零~2.2 截断表语法注意这个操作慎用只能对整张操作 不能像delete 一样针对部分数据操作实际上Mysql不对数据操作 所以比delete更快 但是truncate在删除数据的时候并不经过真正的事务所以无法回归会重置auto_increment项~操作语法特点自增列事务回滚DELETEDELETE FROM 表名逐行删除会记录日志保留原有自增值新插入从原最大值继续支持InnoDBTRUNCATETRUNCATE [TABLE] 表名直接清空表不记录行日志速度更快重置自增列为 1重新开始不支持三、插入查询结果插入查询结果和聚合函数实现数据的批量处理与统计分析。语法经典场景删除表中的重复数据只保留一份。为什么最后是通过rename 方式进行就是单纯的想等一些都就绪了然后统一放入、更新、生效四、聚合函数聚合函数用于对一组数据进行统计计算返回单个结果是数据分析的基础常用聚合函数如下函数说明注意COUNT([DISTINCT] expr)统计数据条数COUNT (*) 不受 NULL 影响COUNT (列) 会忽略 NULLSUM([DISTINCT] expr)统计数据总和非数字类型无意义AVG([DISTINCT] expr)统计平均值非数字类型无意义忽略 NULLMAX([DISTINCT] expr)统计最大值忽略 NULLMIN([DISTINCT] expr)统计最小值忽略 NULL-- 1. 统计学生总数COUNT(*) SELECT COUNT(*) FROM students; -- 2. 统计有QQ号的学生数COUNT(列)忽略NULL SELECT COUNT(qq) FROM students; -- 3. 统计数学成绩总分、平均分 SELECT SUM(math), AVG(math) FROM exam_result; -- 4. 统计英语最高分、70分以上的数学最低分 SELECT MAX(english), MIN(math) FROM exam_result WHERE math 70; -- 5. 统计去重后的数学成绩个数 SELECT COUNT(DISTINCT math) FROM exam_result;4.1 统计班级有多少同学4.2 统计班级收集的qq号有多少4.3 统计本次考试的数学成绩分数个数4.4 统计数学成绩总分4.5 统计平均总分4.6 返回英语最高分4.7 返回70分以上的数学最低分五、group by 子句的使用聚合函数通常与GROUP BY搭配使用实现按指定列分组统计核心语法核心规则GROUP BY 后可跟多列按多列组合分组需对分组结果再筛选时使用HAVING而非 WHEREHAVING 支持聚合函数 / 别名WHERE 筛选原始数据HAVING 筛选分组后的数据。-- 1. 按部门分组统计每个部门的平均工资、最高工资 SELECT deptno, AVG(sal), MAX(sal) FROM EMP GROUP BY deptno; -- 2. 按部门岗位分组统计每个部门每个岗位的平均工资、最低工资 SELECT deptno, job, AVG(sal), MIN(sal) FROM EMP GROUP BY deptno, job; -- 3. 统计平均工资低于2000的部门HAVING筛选分组结果 SELECT deptno, AVG(sal) myavg FROM EMP GROUP BY deptno HAVING myavg 2000;如何显示每个部门的平均工资和最高工资显示每个部门的每种岗位的平均工资和最低工资显示平均工资低于2000的部门和它的平均工资先统计各个部门的平均工资【结果先聚合出来】对聚合的结果进行判断 【having和group by配合使用对group by 的结果进行过滤having经常和group by搭配使用作用是对分组进行筛选作用有些像where。HAVING 和 WHERE 特性WHEREHAVING筛选时机分组GROUP BY之前分组GROUP BY之后筛选对象原始的、未分组的单行数据分组后的「统计结果」组级数据能否用聚合函数❌ 不可以操作的是单行数据✅ 可以操作的是分组统计结果适用场景过滤单个符合条件的记录过滤符合条件的分组WHERE 是「分组前」筛选单行数据不能用聚合函数HAVING 是「分组后」筛选分组结果可以用聚合函数通俗举例假设你要统计「每个班级数学平均分超过 80 分的班级」WHERE先筛选「数学分数 0 分的学生」排除无效数据这是对单个学生的筛选HAVING在按班级分组计算平均分后筛选「平均分 80 分的班级」这是对整个班级的筛选。不要单纯的认为只有磁盘上表结构导入到mysql 真实存在的表才叫表这是不对的中间筛选出来的包括最终结果在我看来全部都是逻辑上的表 MYSQL一切皆表未来只要我们能够处理好单表的CURD所有sql场景我们也可以用同一种方式进行~