跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
SQL

MySQL 基本查询实战:增删改查与聚合分组详解

MySQL 基本查询涵盖增删改查核心操作。 SELECT 语句的多列查询、表达式计算、别名及去重功能。重点解析 WHERE 条件筛选逻辑,包括比较运算符、模糊匹配 LIKE、范围 BETWEEN 及 IN 用法。深入探讨 ORDER BY 排序规则与 LIMIT 分页机制,区分别名在 WHERE 与 ORDER BY 中的执行顺序差异。更新与删除部分对比 UPDATE 语法及 DELETE 与 TRUNCATE 对自增长 ID 的影响。最后讲解 COUNT、SUM 等聚合函数应用,以及 GROUP BY 分组与 HAVING 筛选条件的配合使用,帮助掌握数据库数据检索与处理的关键技术点。

奶糖兔发布于 2026/3/23更新于 2026/8/1734 浏览
MySQL 基本查询实战:增删改查与聚合分组详解

MySQL 基本查询实战

在数据库操作中,增删改查(CRUD)是核心能力。今天我们将深入探讨 MySQL 如何通过语句对数据进行查询和处理,重点讲解 Retrieve(读取)、Create(创建/替换)、Update(更新)和 Delete(删除)的具体用法。

一、Create 与 Replace

对于数据的创建,我们最熟悉的是 INSERT 语句。这里补充一个常用场景:REPLACE 替换。

1.1 替换操作

REPLACE 的用法与 INSERT 类似,但行为有所不同:

  • 无冲突数据:直接插入,返回 1 row affected。
  • 有冲突数据:先删除旧记录,再插入新记录,返回 2 rows affected。
-- 示例:如果主键或唯一索引已存在,则触发替换逻辑
REPLACE INTO table_name (col1, col2) VALUES ('val1', 'val2');

实际开发中,这常用于确保数据'只有一条最新记录',但要注意它涉及两次写操作,性能开销比 UPDATE 大。

二、Retrieve 查询详解

SELECT 是查询的核心。虽然平时用得最多的是 FROM 和 WHERE,但完整的 SELECT 语句包含更多选项。

2.1 SELECT 列

全列查询
SELECT * FROM exam_result;

虽然方便,但通常不建议在生产环境使用 *。原因有二:一是传输数据量大,二是可能影响索引优化。练习时可用,正式环境建议明确指定列名。

指定列与表达式

可以查询单列或多列,甚至支持表达式计算:

-- 多列查询
SELECT name, english FROM exam_result;

-- 表达式计算(如总分)
SELECT chinese + math + english AS total_score FROM exam_result;

注意:表达式结果默认没有别名,阅读起来不直观,建议使用 AS 指定别名。

去重

当需要统计不重复的值时,使用 DISTINCT:

SELECT DISTINCT math FROM exam_result;

2.2 WHERE 条件筛选

WHERE 子句用于过滤数据,支持多种运算符。

比较与逻辑运算
  • 比较运算符:=, >, <, >=, <=, <>
  • 逻辑运算符:AND, OR, NOT

示例:英语不及格的同学

SELECT name, english FROM exam_result WHERE english < 60;

示例:语文成绩在 [80, 90] 之间

-- 写法一:使用 AND
SELECT name, chinese FROM exam_result WHERE chinese >= 80 AND chinese <= 90;

-- 写法二:使用 BETWEEN...AND(推荐,更简洁)
SELECT name, chinese FROM exam_result WHERE chinese BETWEEN 80 AND 90;

示例:数学成绩为特定值

-- 写法一:多个 OR
SELECT name, math FROM exam_result WHERE math = 58 OR math = 59 OR math = 98 OR math = 99;

-- 写法二:使用 IN(推荐)
SELECT name, math FROM exam_result WHERE math IN (58, 59, 98, 99);
模糊查询 LIKE

区分'姓孙'和'孙某':

  • %:匹配任意多个字符(包括 0 个)。
  • _:匹配严格的一个字符。
-- 姓孙的同学(名字长度不限)
SELECT * FROM exam_result WHERE name LIKE '孙%';

-- 孙某同学(名字两个字)
SELECT * FROM exam_result WHERE name LIKE '孙_';
注意事项:别名与执行顺序

在 WHERE 中使用别名会报错,因为 SQL 执行顺序是:FROM -> WHERE -> SELECT。别名是在 SELECT 阶段生成的,WHERE 阶段还无法识别。

但在 ORDER BY 中可以使用别名,因为排序发生在 SELECT 之后。

2.3 结果排序与分页

排序 ORDER BY

默认升序(ASC),降序需加 DESC。NULL 值在升序时排在最前,降序时排在最后。

-- 按数学成绩降序
SELECT name, math FROM exam_result ORDER BY math DESC;
分页 LIMIT

避免全表扫描导致卡顿,使用 LIMIT 限制返回行数。

-- 显示前 3 行
SELECT * FROM exam_result LIMIT 3;

-- 跳过前 2 行,显示接下来的 3 行(offset, count)
SELECT * FROM exam_result LIMIT 2, 3;

-- 推荐写法:OFFSET 关键字
SELECT * FROM exam_result LIMIT 3 OFFSET 2;

三、Update 更新

UPDATE 用于修改现有数据,必须配合 WHERE 防止误改全表。

-- 修改孙悟空的数学成绩
UPDATE exam_result SET math = 80 WHERE name = '孙悟空';

-- 同时修改多列
UPDATE exam_result SET math = 60, chinese = 70 WHERE name = '曹孟德';

-- 复杂条件:总成绩倒数前三加 30 分
UPDATE exam_result 
SET math = math + 30 
WHERE id IN (
    SELECT id FROM (
        SELECT id FROM exam_result 
        ORDER BY (chinese + math + english) ASC 
        LIMIT 3
    ) AS temp
);

注意:MySQL 不支持 += 这种语法,必须写成 math = math + 30。

四、Delete 删除

删除数据需谨慎,DELETE 和 TRUNCATE 有本质区别。

4.1 DELETE

可带条件删除,也可清空整表。但 DELETE 不会重置自增长 ID(AUTO_INCREMENT)。

DELETE FROM exam_result WHERE name = '孙悟空';
DELETE FROM exam_result; -- 清空整表

4.2 TRUNCATE

截断表,速度快,且会重置自增长 ID。但不能回滚,且只能针对整表。

TRUNCATE TABLE exam_result;

五、聚合函数

聚合函数用于对一组数据进行统计。

  • COUNT():统计行数
  • SUM():求和
  • AVG():平均值
  • MAX() / MIN():最大/最小值
-- 统计班级人数
SELECT COUNT(*) FROM exam_result;

-- 统计数学成绩去重后的个数
SELECT COUNT(DISTINCT math) FROM exam_result;

-- 获取英语最高分
SELECT MAX(english) FROM exam_result;

-- 获取大于 70 分的数学最低分
SELECT MIN(math) FROM exam_result WHERE math > 70;

六、GROUP BY 分组

GROUP BY 将数据分组后应用聚合函数。配合 HAVING 进行分组后的筛选。

6.1 基础分组

-- 每个部门的平均工资和最高工资
SELECT deptno, AVG(sal), MAX(sal) 
FROM emp 
GROUP BY deptno;

6.2 多重分组

-- 每个部门每种岗位的平均工资
SELECT deptno, job, AVG(sal) 
FROM emp 
GROUP BY deptno, job;

6.3 HAVING vs WHERE

  • WHERE:在分组前筛选具体列。
  • HAVING:在分组后筛选聚合结果。
-- 错误:WHERE 不能用于聚合函数
-- SELECT deptno, AVG(sal) FROM emp WHERE AVG(sal) > 2000 GROUP BY deptno;

-- 正确:使用 HAVING
SELECT deptno, AVG(sal) 
FROM emp 
GROUP BY deptno 
HAVING AVG(sal) > 2000;

掌握这些基础查询技巧,能帮你更高效地处理数据库中的各类业务需求。

目录

  1. MySQL 基本查询实战
  2. 一、Create 与 Replace
  3. 1.1 替换操作
  4. 二、Retrieve 查询详解
  5. 2.1 SELECT 列
  6. 全列查询
  7. 指定列与表达式
  8. 去重
  9. 2.2 WHERE 条件筛选
  10. 比较与逻辑运算
  11. 模糊查询 LIKE
  12. 注意事项:别名与执行顺序
  13. 2.3 结果排序与分页
  14. 排序 ORDER BY
  15. 分页 LIMIT
  16. 三、Update 更新
  17. 四、Delete 删除
  18. 4.1 DELETE
  19. 4.2 TRUNCATE
  20. 五、聚合函数
  21. 六、GROUP BY 分组
  22. 6.1 基础分组
  23. 6.2 多重分组
  24. 6.3 HAVING vs WHERE
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 大模型分类详解:任务、模态与架构解析
  • 七零后中年人转行 Python:职业转型经验与学习路径指南
  • 基于 Kaggle 免费环境体验 Stable Diffusion AI 绘画入门
  • WebMCP:Chrome 新 API 特性与 Agentic Web 前瞻
  • 基于 Rokid 灵珠平台搭建旅游 AR 智能体
  • Spring Boot 全局异常处理与日志监控实战
  • 北京理工大学网络与信息安全专业考研备考经验分享
  • Quilter:把 PCB 设计交给物理驱动的 AI
  • Java 核心面试题汇总及解析
  • PyQt5 高级界面开发:菜单工具栏与布局管理
  • 大模型微调工具推荐:LLaMA-Factory 使用指南
  • 从 vw/vh 到 clamp(),前端响应式设计的痛点与进化
  • AI 产品经理转行大模型:核心能力与实施指南
  • LangChain 完整指南:使用大语言模型构建应用程序
  • OpenClaw 部署与 QQ 机器人接入指南
  • LLaMA Factory+QLoRA 微调 70B 模型实测
  • WorkBuddy 接入 QQ 机器人配置指南
  • Javashop 商城系统:企业级电商解决方案架构解析
  • AI 驱动 PDF 文档智能解析:MinerU 本地部署与 API 调用
  • 使用 OpenClaw 与飞书搭建服务器运维机器人

相关免费在线工具

  • SQL 美化和格式化

    在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online

  • SQL转CSV/JSON/XML

    解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online

  • CSV 工具包

    CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online