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

MySQL 基本查询

综述由AI生成MySQL 的基本查询与操作,涵盖创建表、插入、替换、读取数据、条件筛选、排序、分页、更新、删除、截断表、去重及聚合统计等功能。重点讲解了 SELECT、INSERT、UPDATE、DELETE 等核心语句的语法与示例,包括 WHERE 条件、ORDER BY 排序、LIMIT 分页以及 GROUP BY 分组聚合的使用,并修正了常见笔误与错误用法。

雪落无声发布于 2026/3/22更新于 2026/5/624K 浏览
MySQL 基本查询

Create

插入

语法:

INSERT [INTO] table_name [(column [, column] ...)] VALUES (value_list) [, (value_list)] ...

value_list: value, [, value] ...

注意:MySQL 语法不区分单双引号,不区分大小写。

忽略 [(column [, column] ...)]:全列插入。

()values():像一个扁担,左边和右边对应。其中前一个括号指明要插入的列,后一个括号填写对应的元素。如果前一个括号忽略则默认为全列插入。

可同时插入多条,即 ()values(),(),()...... into 也可省略。

示例:

mysql> create table test8( -> id int primary key auto_increment, -> name varchar(20) -> ); Query OK, 0 rows affected (0.02 sec)
mysql> insert into test8 (id,name)values(20250031,'张三'); Query OK, 1 row affected (0.01 sec)
mysql> insert test8 (name)values('李四'); Query OK, 1 row affected (0.01 sec)
mysql> insert test8 values(20250045,'王五'); Query OK, 1 row affected (0.00 sec)
mysql> insert test8 (name)values('赵六'),('田七'); Query OK, 2 rows affected (0.01 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql>

替换

语法

INSERT ... ON DUPLICATE KEY UPDATE column = value [, column = value] ...

通常用来解决由于主键或者唯一键对应的值已经存在而导致插入失败的问题。即对数据进行更新。

如下我们插入已存在主键的值:

mysql> insert into values(20250031,'李华'); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'values(20250031,'李华')' at line 1
mysql> insert into test8 values(20250031,'李华') on duplicate key update name='李华'; Query OK, 2 rows affected (0.00 sec)
mysql>

方法二:

mysql> replace into test8 values(20250031,'小明'); Query OK, 2 rows affected (0.00 sec)

Retrieve(读取)

select(确定列)

语法:

SELECT column1, column2, ... FROM table_name [WHERE condition] [GROUP BY column_name] [HAVING condition] [ORDER BY column_name [ASC|DESC]] [LIMIT offset, count];

全列查询:select * from 表名(建议不要使用)。

去重:select distinct 列名 from 表名

显示时对列重命名:列名 as 新列名。as 可省略。

其次可对列进行运算然后显示。

where 条件(确定行)

语法:

SELECT 列名 1, 列名 2, ... FROM 表名 WHERE 条件表达式;

注意:NULL 和 0 不一样。

NULL=NULL 结果还是 NULL,因为 NULL 不可以用=比较,而是用<=>。通常用 is null,is not null。

示例:

英语不及格的同学及英语成绩

mysql> select name,english from exam_result where english<60;

语文成绩在 [80,90] 分的同学及语文成绩

select name,chinese from exam_result where chinese>=80 and chinese<=90;

或:

mysql> select name,chinese from exam_result where chinese between 80 and 90;

数学成绩是 58 或 59 或 98 或 99 分的同学及数学成绩

mysql> select name,math from exam_result where math=58 or math=59 or math=98 or math=99;

或

mysql> select name,math from exam_result where math in (58,59,98,99);

姓孙的同学 及 孙某同学

mysql> select name from exam_result where name like '孙%';
mysql> select name from exam_result where name like '孙_';

语文成绩好于英语成绩的同学

mysql> select name,chinese,english from exam_result where chinese > english;

总分在 200 分以下的同学

mysql> select name,chinese+math+english 总分 from exam_result where chinese+math+english<200;

注意:语句的执行顺序是从右往左,所以不能使用'总分'这个词来计算,而 where 不支持把列重命名。执行顺序:1.from 2.where 3.select

语文成绩>80 并且不姓孙的同学

mysql> select name,chinese from exam_result where chinese>80 and not(name like '孙%');

孙某同学,否则要求总成绩>200 并且语文成绩<数学并且英语成绩>80

mysql> select name,chinese,math,english,chinese+math+english 总分 -> from exam_result -> where (name like '孙_') or (chinese+math+english>200 and chinese<math and english>80);

null 查询

order by 语句

语法:

-- ASC 为升序(从小到大) -- DESC 为降序(从大到小) -- 默认为 ASC

SELECT ... FROM table_name [WHERE ...] ORDER BY column [ASC|DESC], [...];

注意:没有带 asc 或 desc 的排序查询,返回的顺序是未定义的。

同学及数学成绩,按数学成绩升序显示:

mysql> select name,math from exam_result order by math asc;

注意:NULL 在排序时原则上比任何值都小。

查询同学各门成绩,依次按数学降序,英语升序,语文升序的方式显示:

mysql> select name,math,english,chinese -> from exam_result -> order by math desc,english desc,chinese asc;

查询同学及总分,从高到低

mysql> select name,math+chinese+english as total -> from exam_result -> order by total desc;

这里 order by 后总分能用别名是因为,order by 是后执行的。

查询姓孙的同学或者姓曹的同学数学成绩,结果按数学成绩由高到低显示:

mysql> select name,math -> from exam_result -> where name like '孙%' or name like '曹%' -> order by math desc;

limit(分页)

语法:

-- 起始下标为 0 -- 从 s 开始,筛选 n 条结果 SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n -- 从 0 开始,筛选 n 条结果 SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n; ; -- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用 SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;

建议:对未知表进行查询时,最好加一条 LIMIT 1,避免因为表中数据过大,查询全表数据导致数据库卡死。

按 id 进行分页,每页 3 条记录,分别显示 第 1、2、3 页

从开头连续读取 3 行

mysql> select*from exam_result limit 3;

从第 2 行开始往下读取 4 行:

mysql> select*from exam_result limit 2,4;

Update(更新)

语法:

UPDATE table_name SET column = expr [, column = expr ...] [WHERE ...] [ORDER BY ...] [LIMIT ...]

用于对查询到的值进行更新。

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

mysql> update exam_result set math=80 where name='孙悟空';

将曹孟德同学的数学成绩改为 60 分,语文成绩改为 70 分

mysql> update exam_result set math=60,chinese=70 where name='曹孟德';

将总成绩倒数前三的 3 位同学的数学成绩加 30 分

mysql> update exam_result set math=math+30 -> order by math+chinese+english asc -> limit 3;

将所有同学的语文成绩更新为原来的 2 倍。

Delete(删除)

语法:

DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

删除孙悟空同学的考试成绩

mysql> delete from exam_result where name='孙悟空';

删除整张表数据:delete from 表名。

截断表

语法:

TRUNCATE [TABLE] table_name

注意:这个操作慎用

  1. 只能对整表操作,不能像 DELETE 一样针对部分数据操作。
  2. 实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是 TRUNCATE 在删除数据的时候,并不经过真正的事物,所以无法回滚。
  3. 会重置 AUTO_INCREMENT 项。delete 不会重置 AUTO_INCREMENT。

去重表数据

语法:

INSERT INTO table_name [(column [, column ...])] SELECT...

比如我们有一个表:duplicate_table,要对它去重,

首先创建一个相同的表结构

mysql> create table no_duplicate_table like duplicate_table;
mysql> insert into no_duplicate_table select distinct * from duplicate_table;

然后把 duplicate_table 删除,no_duplicate_table 重命名为 duplicate_table。

这样的好处在于把一切都准备就绪,然后统一放入、更新、生效等。

聚合统计

聚合函数

函数说明
COUNT([DISTINCT] expr)返回查询到的数据的 数量
SUM([DISTINCT] expr)返回查询到的数据的 总和,不是数字没有意义
AVG([DISTINCT] expr)返回查询到的数据的 平均值,不是数字没有意义
MAX([DISTINCT] expr)返回查询到的数据的 最大值,不是数字没有意义
MIN([DISTINCT] expr)返回查询到的数据的 最小值,不是数字没有意义

测试:

统计班里一共多少学生

mysql> select count(*) from exam_result;

或:

mysql> select count(name) from exam_result;

统计数学成绩总分

mysql> select sum(math) from exam_result;

统计平均总分

mysql> select sum(math+chinese+english)/count(name) from exam_result;

或:

mysql> select avg(math+chinese+english) from exam_result;

返回英语最高分

mysql> select max(english) from exam_result;

返回>70 分以上的数学最低分

mysql> select min(math) from exam_result where math>70;

group by 句子的使用

语法:

select column1, column2, .. from table group by column;

分组:把一组按条件拆分成多个组。然后在各自组能做统计。在逻辑上相当于拆分成多张"表"。

测试:

显示每个部门的平均工资和最高工资

select deptno,avg(sal),max(sal) from emp group by deptno;

显示每个部门的每种岗位的平均工资和最低工资

select avg(sal),min(sal),job, deptno from emp group by deptno, job;

显示平均工资低于 2000 的部门和它的平均工资。having 和 group by 配合使用,对 group by 结果进行过滤

select avg(sal) as myavg from emp group by deptno having myavg<2000;

having 与 where 的使用方法相同,但它们使用在不同的场景。

  • where:对具体任意列进行统计筛选。
  • having:对分组聚合后的结果进行条件筛选。

目录

  1. Create
  2. 插入
  3. 替换
  4. Retrieve(读取)
  5. select(确定列)
  6. where 条件(确定行)
  7. order by 语句
  8. limit(分页)
  9. Update(更新)
  10. Delete(删除)
  11. 截断表
  12. 去重表数据
  13. 聚合统计
  14. 聚合函数
  15. group by 句子的使用
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • Java 填充 Word 模板实战:文本、列表与复选框处理
  • 数据结构:常见时间复杂度与空间复杂度
  • 二叉树深度优先遍历实战:计算布尔值与路径数字和
  • 并查集数据结构详解与实战应用
  • 基于 OpenClaw、Zeabur 与飞书的 AI 机器人搭建教程
  • CISP 注册信息安全专业人员认证详解与备考指南
  • C 语言数据结构实战:双向链表航班管理系统
  • 主流前端技术栈、框架与组件库生态选型指南
  • WebAssembly 技术详解:开启 Web 性能新时代
  • Python 爬虫入门与实战教程
  • AI 生成前端代码:软件原型自动化设计流程
  • 基于 ChatGPT 构建电商客服问答系统
  • 大模型(LLMs)面试题库汇总:基础、微调、RAG 与推理
  • Podman 与 Docker 国内镜像源配置指南(2025-05)
  • OpenRFT:基于强化微调实现大模型领域推理泛化
  • 开源 AI 短剧工具:从小说到视频的自动化流水线
  • Midjourney 工作原理、使用流程及优缺点分析
  • YOLOv8 C++部署:OpenCV DNN 实现 V5/V7/V8
  • PTA L2-054 三点共线 C++ 题解与易错坑点分析
  • Xilinx PCIe IP 核详解、FPGA 实现及仿真流程(Virtex-7 Gen3)

相关免费在线工具

  • 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