Mysql基本查询(下)
3. 更新(update)
update
语句用于修改数据库中已存在的数据。
语法:
代码语言:javascript代码运行次数:0运行复制UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
语法解析:
-
UPDATE table_name
:指定要更新的表名。 -
SET column1 = value1, column2 = value2, ...
:指定需要更新的列和新值。可以同时更新多个列,每个列的更新使用逗号分隔。 -
WHERE condition
:这是一个非常重要的部分,限定更新的范围。WHERE
子句确保只有符合条件的记录会被更新。如果不使用WHERE
子句,表中的所有记录都会被更新。
小知识:
- 更新时最好通过
where
条件进行精确匹配,避免误操作影响到所有记录。 - 使用
order by
和limit
可以控制更新的记录数,避免批量更新时产生的风险。
示例:
更新单列:
代码语言:javascript代码运行次数:0运行复制update exam_result set math=80 where name='孙悟空';
更新前: | 更新后 |
---|---|
更新多列:
代码语言:javascript代码运行次数:0运行复制update exam_result set math=60,chinese=70
where name='曹孟德';
更新前: | 更新后 |
---|---|
基于表达式更新:
代码语言:javascript代码运行次数:0运行复制update exam_result set math=math+30 order
by math+english+chinese asc limit 3;
更改前后三名 | 更改后后三名: |
---|---|
4. 删除(delete)
delete
语句用于删除数据库中的记录。
语法:
代码语言:javascript代码运行次数:0运行复制DELETE FROM table_name
WHERE condition;
语法解析:
DELETE FROM table_name
:指定要从哪个表中删除记录。WHERE condition
:指定删除的条件。如果没有WHERE
子句,所有记录都会被删除。
小知识:
- 使用
where
条件时要特别小心,避免误删除整个表的数据。 -
truncate
语句比delete
语句更高效,且不生成日志,但它无法回滚且会重置自增列。
示例:
删除单条记录:
代码语言:javascript代码运行次数:0运行复制delete from exam_result where name='孙悟空';
删除前 | 删除后 |
---|---|
删除整表数据:
方案一:删除表 | 方案二:截断表 |
---|---|
delete from for_delete; | truncate for_delete; |
删除前自增值: | 删除前子增值: |
删除后自增值:(无变化) | 删除后子增值清零: |
删除重复数据:
创建相同的表结构 | 创建相同表结构并插入去重元素 | |
---|---|---|
create table <新表名> like <原表名>; | ||
在新表中插入去重数据 | create table <新表名> as select distinct *from <旧表名>; | |
insert <新表名> select distinct *from<原表名>; | ||
删除旧表 | ||
drop table <旧表>; | ||
改新表名为旧表 | ||
alter table <新表名> rename to <旧表名> |
5.聚合统计
聚合函数
函数 | 说明 |
---|---|
COUNT([DISTINCT] expr) | 返回查询到的数据的数量 |
SUM([DISTINCT] expr) | 返回查询到的数据的总和,不是数字没有意义 |
AVG([DISTINCT] expr) | 返回查询到的数据的平均值,不是数字没有意义 |
MAX([DISTINCT] expr) | 返回查询到的数据的最大值,不是数字没有意义 |
MIN([DISTINCT] expr) | 返回查询到的数据的最小值,不是数字没有意义 |
- 查询个数(count)
select count(*)from exam_result;
- 统计相加(sum)
select sum(math) from exam_result;
- 平均值(avg)
select agv(math) from exam_result;
- 最小值(min)
select min(math) from exam_result;
- 最大值(max)
select max(math) from exam_result;
6.分组统计(group by)
groupe by 用于对数据的分类讨论,可以添加其他列
基本语法:
代码语言:javascript代码运行次数:0运行复制SELECT column1, column2, aggregate_function(column3)
FROM table_name
GROUP BY column1, column2;
column1
,column2
:用于分组的列。aggregate_function(column3)
:对分组数据进行聚合计算(如COUNT()
,SUM()
,AVG()
,MAX()
,MIN()
)。
小知识:
- groupe by 常常和聚合函数一起使用
- 使用having可以让分组更加灵活
统计(having)
对聚合后的数据进行排列
where 和having的区别
执行顺序:
在 SQL 查询中,查询的执行顺序是固定的,按以下顺序执行:
- FROM:从指定的表中获取数据。
- WHERE:在数据分组前,对原始数据进行过滤。
- GROUP BY:将数据按指定的列进行分组。
- SELECT:选择要展示的列。
- HAVING:对已经分组后的数据进行过滤。
- ORDER BY:排序。
select之前的不能使用别名,select之后的才能使用别名。
用法:
WHERE
:用于在 分组前 对原始数据进行过滤,不能直接对聚合结果(如SUM()
,AVG()
)进行筛选,也不能使用列的别名。HAVING
:用于 分组后 对聚合结果进行过滤,常常用于聚合函数(如AVG()
,SUM()
)的条件筛选,可以使用别名。
当然还有今天的配套练习,快来试试吧:配套练习
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-03-23,如有侵权请联系 cloudcommunity@tencent 删除mysql函数数据统计语法