MySQL快速入门篇---增删改查(下)
目录
一、修改(Update)
1.语法
2.示例
二、删除(Delete)
1.语法
2.示例
三、聚合函数
1.示例
1.1、COUNT
1.2、SUM
1.3、AVG
1.4、MAX
1.5、MIN
四、分组查询(GROUP BY)
1.语法
2.示例
3.Having
一、修改(Update)
1.语法
UPDATE table_reference SET assignment [, assignment] ... [WHERE where_condition]
[ORDER BY ...] [LIMIT row_count]
2.示例
我们先定义一个exam表如图所示:
将李星云的语文成绩更改为88分
update exam set chinese=88 where name='李星云';
其查询结果如下:
将李星云的语文成绩变更为80,数学成绩变更为80
update exam set chinese=80,math=80 where name='李星云';
其查询结果如下:
将总成绩倒数前三的3位同学的数学成绩减去10分
首先查询总成绩倒数前三的三位同学(有NULL值的成绩不算):
select * from exam where chinese+math+english is not null order by chinese+math+english asc limit 3;
然后更改成绩:
update exam set math=math-10 where chinese+math+english is not null order by chinese+math+english asc limit 3;
然后查询更改后的三位同学的成绩:
select * from exam where name in ('莹勾','上官云阙','旱魃');
注意:
• 以原值的基础上做变更时,不能使用math-=10这样的语法
• 不加where条件时,会导致全表数据被更新
二、删除(Delete)
1.语法
DELETE FROM tbl_name [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
2.示例
删除李茂贞的考试成绩
delete from exam where name = '李茂贞';
此时再查询所有同学的信息:
发现已经没有李茂贞的信息,删除成功
删除整张表的数据
delete from exam;
三、聚合函数
1.示例
这里的示例我们依然用exam表
1.1、COUNT
统计exam表中有多少记录
select count(*) from exam;
其结果如图:
1.2、SUM
统计所有学生数学成绩总分
select sum(math) as '数学总分' from exam;
其运行结果如下图:
1.3、AVG
统计平均总分
select avg(chinese+math+english) as '平均总分' from exam;
其查询结果如下:
1.4、MAX
查询英语最高分
select max(english) as '英语最高分' from exam;
其查询结果如下:
1.5、MIN
查询英语成绩最低分
select min(english) as '英语最低分' from exam;
其查询结果如下:
四、分组查询(GROUP BY)
1.语法
SELECT {col_name | expr} ,... ,aggregate_function (aggregate_expr)FROM table_references GROUP BY {col_name | expr}, ... [HAVING where_condition]
2.示例
创建一个示例表 :
create table emp (id bigint primary key auto_increment,name varchar(20) not null,role varchar(20) not null,salary decimal(10, 2) not null
);
insert into emp values (1, '张三', '老板', 1500000.00);
insert into emp values (2, '李四', '老板', 1800000.00);
insert into emp values (3, '王五', '会计', 10000.00);
insert into emp values (4, '赵六', '会计', 12000.00);
insert into emp values (5, '钱七', '员工', 9000.00);
insert into emp values (6, '楚八', '员工', 8000.00);
insert into emp values (7, '宋九', '实习', 956.8);
insert into emp values (8, '顾十', '实习', 700.5);
insert into emp values (9, '陈十一', '实习', 333.3);
统计每个角色的人数
select role,count(*) from emp group by role;
查询结果如下:
3.Having
使用GROUP BY对结果进行分组处理之后,对分组的结果进行过滤时,不能使用 WHERE 子句,而要使用 HAVING 子句
显示平均成绩低于1500的角色和它的平均工资
select role,avg(salary) from emp group by role having avg(salary)<1500;
其运行结果如下:
增删改查这一内容到这里就正式结束了,觉得有帮助的各位佬们可以一键三连支持一波,感激不尽!!!