MySQL表的查询(二)

呜呜呜,其实我已经写好了这个博客,附有每个功能的截图和详细介绍,但是我一不小心给删了,找不回来了,太伤心了,写了蛮久的,蚌埠住了,我只能让ai帮我写一篇了,因为我真的累了,这太伤我心了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(不过我会过目一遍ai写的博客,确保全部都谈论到才会发布)

本文基于实际案例讲解 MySQL 中最核心的操作:更新、删除、统计、分组

建议搭配实际数据库操作练习


🔄 6.3 Update(更新数据)

✨ 基本语法

复制代码
UPDATE table_name 
SET column = value [, column = value ...]
[WHERE ...]
[ORDER BY ...]
[LIMIT ...];

👉 本质:对查询结果进行修改


📌 示例1:修改单个字段

👉 将"孙悟空"的数学成绩改为 80 分

复制代码
UPDATE exam_result 
SET math = 80 
WHERE name = '孙悟空';

🧾 更新前:

name math
孙悟空 78

🧾 更新后:

name math
孙悟空 80

📌 示例2:同时修改多个字段

复制代码
UPDATE exam_result 
SET math = 60, chinese = 70 
WHERE name = '曹孟德';

👉 一条 SQL 更新多个列


📌 示例3:基于原值更新(🔥常考)

👉 总分倒数前三名,数学 +30

复制代码
UPDATE exam_result 
SET math = math + 30
ORDER BY chinese + math + english 
LIMIT 3;

💡 核心点

  • ❗ MySQL 不支持 math += 30

  • ✅ 必须写成:math = math + 30


⚠️ 示例4:全表更新(危险操作)

复制代码
UPDATE exam_result 
SET chinese = chinese * 2;

👉 没有 WHERE → 所有数据都会被修改

⚠️ 实际开发中必须谨慎!


❌ 6.4 Delete(删除数据)


📌 基本语法

复制代码
DELETE FROM table_name 
[WHERE ...]
[ORDER BY ...]
[LIMIT ...];

🧨 示例1:删除一条数据

复制代码
DELETE FROM exam_result 
WHERE name = '孙悟空';

💣 示例2:删除整张表

复制代码
DELETE FROM table_name;

👉 特点:

  • 数据被删除

  • 自增 id 不会重置


⚡ TRUNCATE(更狠)

复制代码
TRUNCATE table_name;

🔍 DELETE vs TRUNCATE

对比项 DELETE TRUNCATE
删除方式 一行一行删 直接清空
是否可回滚 ✅ 可以 ❌ 不可以
是否重置自增 ❌ 不重置 ✅ 重置
速度 慢 非常快

👉 一句话总结:

TRUNCATE = "直接把表砍了重建"


📥 6.5 插入查询结果(去重经典写法🔥)


🎯 场景:去重数据

原表(有重复)

id name
100 aaa
100 aaa
200 bbb

解决方案

① 创建新表

复制代码
CREATE TABLE new_table LIKE old_table;

② 去重插入

复制代码
INSERT INTO new_table 
SELECT DISTINCT * FROM old_table;

③ 原子替换(高阶技巧🔥)

复制代码
RENAME TABLE old_table TO backup_table,
             new_table TO old_table;

👉 完成"无感知去重"


📊 6.6 聚合函数(统计分析核心)


📌 常用函数

函数 作用
COUNT 数量
SUM 求和
AVG 平均值
MAX 最大值
MIN 最小值

📌 示例1:统计人数

复制代码
SELECT COUNT(*) FROM students;

👉 NULL 不影响结果


📌 示例2:统计有 qq 的人数

复制代码
SELECT COUNT(qq) FROM students;

👉 NULL 会被忽略


📌 示例3:去重统计

复制代码
SELECT COUNT(DISTINCT math) FROM exam_result;

📌 示例4:总分

复制代码
SELECT SUM(math) FROM exam_result;

📌 示例5:平均总分

复制代码
SELECT AVG(chinese + math + english) FROM exam_result;

📌 示例6:最大/最小

复制代码
SELECT MAX(english) FROM exam_result;
SELECT MIN(math) FROM exam_result WHERE math > 70;

📦 6.7 GROUP BY(分组查询🔥重点)


✨ 基本语法

复制代码
SELECT column, aggregate_function
FROM table
GROUP BY column;

📌 示例1:按部门统计平均工资

复制代码
SELECT deptno, AVG(sal), MAX(sal)
FROM EMP
GROUP BY deptno;

📌 示例2:多字段分组

复制代码
SELECT deptno, job, AVG(sal)
FROM EMP
GROUP BY deptno, job;

📌 示例3:分组后筛选(🔥重点)

复制代码
SELECT deptno, AVG(sal) AS avg_sal
FROM EMP
GROUP BY deptno
HAVING avg_sal < 2000;

❗ WHERE vs HAVING

条件 作用阶段
WHERE 分组前
HAVING 分组后

👉 面试常问!


SQL执行顺序(面试必考🔥)

复制代码
FROM → ON → JOIN → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT

🎯 总结(建议背下来)


🧩 一张图理解 CRUD

操作 SQL
增 INSERT
查 SELECT
改 UPDATE
删 DELETE

🔥 高频面试点

  • UPDATE 是否可以不加 WHERE?(可以,但危险)

  • DELETE 和 TRUNCATE 区别

  • COUNT(*) 和 COUNT(列) 区别

  • WHERE vs HAVING

  • GROUP BY 必须配合聚合函数

虽然文章没了,但是我文章里面用的截图还在,下面是对应操作的所有截图

相关推荐
李兆龙的博客3 小时前
问津集 #26:Lakebase——Postgres 的版本化页面存储、数据库分支与计算弹性
数据库
_upupup4 小时前
Linux的调试工具——gdb/cgdb
linux·服务器
JeJe同学4 小时前
Docker镜像导入、容器启动
linux·运维·docker
Jason_zhao_MR4 小时前
Linux与实时控制如何兼得
linux·嵌入式硬件·机器人·工业控制
倔强的石头_5 小时前
聊聊金仓KFS:一款把数据同步软件做扎实的产品
数据库
闲云野鹤在人间5 小时前
MySQL|从理论、安装、备份到主从复制、MHA高可用详解
linux·运维·数据库·mysql·云计算
禾小西5 小时前
Redis:从两大维度和三大主线建立知识体系
数据库·redis·缓存
李日华大战鸡红5 小时前
FOC状态空间方程模型推导(学习记录)
python·学习·线性代数
禾小西6 小时前
Redis 数据结构:快速的 Redis 有哪些慢操作?
数据结构·数据库·redis
一个风轻云淡6 小时前
GCC 和 GDB命令简单解读
java·linux·前端