跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
SQL

MySQL 基本查询详解:增删查改核心语法实战

MySQL 基础查询涵盖增删查改四大操作。通过 SELECT 语句实现数据检索,支持多列查询、表达式计算及去重;WHERE 子句配合比较与逻辑运算符进行条件筛选,LIKE 处理模糊匹配;ORDER BY 控制排序,LIMIT 实现分页。聚合函数统计数据,GROUP BY 结合 HAVING 完成分组过滤。掌握这些核心语法是数据库操作的基础。

字节跳动发布于 2026/3/23更新于 2026/5/25 浏览
MySQL 基本查询详解:增删查改核心语法实战

MySQL 基本查询详解:增删查改核心语法实战

在数据库操作中,CRUD(Create, Retrieve, Update, Delete)是最基础也是最核心的功能。今天我们将深入探讨 MySQL 如何通过语句对数据进行增删查改,重点梳理 SELECT 查询的各种用法及注意事项。

一、Create(创建与插入)

对于 CREATE 操作,我们最熟悉的是 INSERT 语句。除了基础的插入,这里补充一下 REPLACE 的用法。

1.1 替换数据

REPLACE 的用法和 INSERT 类似,但行为有所不同。它主要用于处理主键或唯一索引冲突的情况:

  • 无冲突:直接插入新数据(返回 1 row affected)。
  • 有冲突:先删除旧数据,再插入新数据(返回 2 row affected)。
-- 示例:如果 sn=20001 已存在,则触发删除后重新插入逻辑
REPLACE INTO table_name (sn, name) VALUES (20001, '孙悟空');

二、Retrieve(读取与查询)

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

2.1 SELECT 列

2.1.1 全列查询

使用 SELECT * FROM table_name 可以查询所有列。但在生产环境中,不建议频繁使用 *,原因有二:

  1. 传输数据量大,影响性能。
  2. 可能绕过索引优化。

练习时可以使用,但实际开发建议明确指定需要的字段。

2.1.2 指定列查询

只查询特定列,用逗号分隔多个字段:

SELECT name, english FROM exam_result;
2.1.3 表达式查询

SELECT 后面不仅可以写列名,还可以写表达式。例如计算总成绩:

SELECT chinese + math + english AS total_score FROM exam_result;

这支持单字段运算或多字段组合运算,结果符合预期即可。

2.1.4 别名

为了结果更优雅,可以为列指定别名。使用 AS 关键字或直接空格:

SELECT chinese + math + english AS total  exam_result;
FROM
2.1.5 结果去重

如果查询结果中有重复值,可使用 DISTINCT 关键字:

SELECT DISTINCT math FROM exam_result;

2.2 WHERE 条件

WHERE 子句用于过滤数据,支持比较运算符、逻辑运算符等。

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

例如查询英语不及格的同学:

SELECT name, english FROM exam_result WHERE english < 60;
2.2.2 范围查询

使用 BETWEEN ... AND ... 表示闭区间:

SELECT name, chinese FROM exam_result 
WHERE chinese BETWEEN 80 AND 90;
2.2.3 集合匹配

当需要匹配多个离散值时,使用 IN 比多个 OR 更简洁:

SELECT name, math FROM exam_result 
WHERE math IN (58, 59, 98, 99);
2.2.4 模糊查询

使用 LIKE 配合通配符:

  • %:匹配任意多个字符(包括 0 个)。
  • _:匹配严格的一个字符。
-- 姓孙的同学
SELECT * FROM exam_result WHERE name LIKE '孙%';
-- 名字为两个字且姓孙
SELECT * FROM exam_result WHERE name LIKE '孙_';
2.2.5 字段间比较

可以直接比较两个字段的值:

SELECT name, chinese, english FROM exam_result 
WHERE chinese > english;
2.2.6 别名在 WHERE 中的限制

注意:别名不能在 WHERE 子句中使用。这是因为 SQL 执行顺序中,WHERE 在 SELECT 之前执行,此时别名尚未定义。

-- 错误写法
SELECT chinese + math + english AS total FROM exam_result WHERE total > 200;

-- 正确写法
SELECT chinese + math + english AS total FROM exam_result 
WHERE (chinese + math + english) > 200;
2.2.7 复杂条件组合

结合 NOT 和 LIKE 排除特定条件:

SELECT * FROM exam_result 
WHERE chinese > 80 AND name NOT LIKE '孙%';
2.2.8 多条件逻辑

长条件建议使用括号明确优先级:

SELECT * FROM exam_result 
WHERE name = '孙某' 
   OR (total > 200 AND chinese < math AND english > 80);

2.3 结果排序

使用 ORDER BY 控制显示顺序,默认升序(ASC),降序需加 DESC。

2.3.1 单列排序
SELECT name, math FROM exam_result ORDER BY math ASC;

注意:NULL 值在排序时被视为最小值,升序排在前,降序排在后。

2.3.2 多列排序

支持多级排序,先按第一列排序,同分再按第二列排序:

SELECT * FROM exam_result 
ORDER BY math DESC, english ASC, chinese ASC;
2.3.3 别名在 ORDER BY 中的使用

与 WHERE 不同,ORDER BY 可以在 SELECT 之后执行,因此可以使用别名:

SELECT chinese + math + english AS total FROM exam_result 
ORDER BY total DESC;

2.4 分页筛选

使用 LIMIT 限制返回行数,常用于分页。

-- 取前 3 条
SELECT * FROM exam_result LIMIT 3;

-- 从第 3 条开始取 2 条(下标从 0 开始)
SELECT * FROM exam_result LIMIT 2 OFFSET 2;

-- 推荐写法:LIMIT 偏移量,数量
SELECT * FROM exam_result LIMIT 2, 3;

三、Update(更新)

UPDATE 用于修改现有数据,通常配合 WHERE 使用,避免误改全表。

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

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

-- 基于聚合结果更新(如总分倒数前三加分)
UPDATE exam_result 
SET math = math + 30 
WHERE id IN (
    SELECT id FROM (
        SELECT id, (chinese+math+english) as total 
        FROM exam_result 
        ORDER BY total ASC 
        LIMIT 3
    ) as temp
);

注意:MySQL 不支持 += 这种简写,必须写成 col = col + value。

四、Delete(删除)

DELETE 用于删除行数据,同样需谨慎使用 WHERE。

4.1 删除特定数据

DELETE FROM exam_result WHERE name = '孙悟空';

4.2 清空整表

DELETE FROM table; 会逐行删除,不重置自增长 ID(AUTO_INCREMENT)。再次插入时 ID 不会从 1 开始。

4.3 截断表

TRUNCATE TABLE table; 会快速清空数据并重置自增长 ID。但它不是事务操作,无法回滚,且只能针对整表。

五、聚合函数

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

  • COUNT(*):统计行数。
  • SUM(col):求和。
  • AVG(col):平均值。
  • MAX(col) / MIN(col):最大/最小值。
-- 统计人数
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(salary), MAX(salary) 
FROM emp 
GROUP BY deptno;

6.2 多重分组

-- 部门 + 岗位的平均工资
SELECT deptno, job, AVG(salary) 
FROM emp 
GROUP BY deptno, job;

6.3 HAVING 与 WHERE 的区别

  • WHERE:在分组前过滤,不能包含聚合函数。
  • HAVING:在分组后过滤,可包含聚合函数。
-- 错误:WHERE 不能用聚合函数
SELECT deptno, AVG(salary) FROM emp WHERE AVG(salary) > 2000 GROUP BY deptno;

-- 正确:HAVING 过滤分组结果
SELECT deptno, AVG(salary) FROM emp 
GROUP BY deptno 
HAVING AVG(salary) > 2000;

掌握上述语法,基本能应对绝大多数 MySQL 查询场景。在实际开发中,注意执行顺序和性能优化,让数据操作更高效。

目录

  1. MySQL 基本查询详解:增删查改核心语法实战
  2. 一、Create(创建与插入)
  3. 1.1 替换数据
  4. 二、Retrieve(读取与查询)
  5. 2.1 SELECT 列
  6. 2.1.1 全列查询
  7. 2.1.2 指定列查询
  8. 2.1.3 表达式查询
  9. 2.1.4 别名
  10. 2.1.5 结果去重
  11. 2.2 WHERE 条件
  12. 2.2.1 比较与逻辑运算
  13. 2.2.2 范围查询
  14. 2.2.3 集合匹配
  15. 2.2.4 模糊查询
  16. 2.2.5 字段间比较
  17. 2.2.6 别名在 WHERE 中的限制
  18. 2.2.7 复杂条件组合
  19. 2.2.8 多条件逻辑
  20. 2.3 结果排序
  21. 2.3.1 单列排序
  22. 2.3.2 多列排序
  23. 2.3.3 别名在 ORDER BY 中的使用
  24. 2.4 分页筛选
  25. 三、Update(更新)
  26. 四、Delete(删除)
  27. 4.1 删除特定数据
  28. 4.2 清空整表
  29. 4.3 截断表
  30. 五、聚合函数
  31. 六、GROUP BY 子句
  32. 6.1 分组统计
  33. 6.2 多重分组
  34. 6.3 HAVING 与 WHERE 的区别
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • JetBrains IDEA 授权机制分析与合法使用方案建议
  • Mac 系统 OpenClaw 本地 AI 执行引擎安装与配置指南
  • 浏览器端 HTML 转 Word 文档方案:html-docx-js 使用指南
  • 雷达信号处理:恒虚警(CFAR)原理与 MATLAB 实战
  • 5 个实用的 AI 提示词工具网站推荐
  • GitHub 配置公钥与 Token 令牌
  • STL 红黑树(RB-tree)原理与插入操作实现详解
  • OpenClaw 开源汉化版安装与配置指南
  • Whisper 模型版本及下载链接
  • Unity-MCP 使用指南:让 AI 连接并控制 Unity 编辑器
  • TRAE、Qoder、Cursor 与 GitHub Copilot 深度对比评测
  • 基于 Docker 部署 Nginx 并通过内网穿透实现远程访问
  • 基于 Web 的在线投稿系统的设计与实现
  • Copilot 人工智能助手功能与版本介绍
  • AI 产品经理入门路线图与核心能力指南
  • 大模型训练:LLaMA-Factory 快速上手
  • 汇川机器人软件 RobotLab 常规操作指南
  • C++ 类与对象进阶:默认成员函数与运算符重载
  • Flutter Web 混合开发:构建跨平台 Web 应用
  • C++ 四种类型转换详解:static_cast、dynamic_cast、const_cast、reinterpret_cast

相关免费在线工具

  • 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