MySQL之CRUD(下)
承接上文,我们此文对MySQL中的剩余操作进行介绍
1. Update修改
1.1 语法
对符合条件的结果进⾏列值更新
UPDATE [LOW_PRIORITY] [IGNORE] table_referenceSET assignment [, assignment] ...[WHERE where_condition][ORDER BY ...][LIMIT row_count]
1.2 示例
1.2.1 将吕布的数学成绩改为99分
将貂蝉的语文成绩改成88,数学77
将总成绩倒数前三的3位同学的数学成绩减上10分
注意:
以原值的基础上做变更时,不能使⽤math-=10这样的语法
不加where条件时,会导致全表数据被列新,谨慎操作
2. Deleate删除
2.1 语法
DELETE FROM tbl_name [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
2.2 示例
删除曹阿满的考试成绩
删除整张表的数据
2.3 注意
执⾏Delete时不加条件会删除整张表的数据,谨慎操作
3. 截断表
3.1 语法
TRUNCATE [TABLE] tbl_name
3.2 示例
- 准备测试表
CREATE TABLE t_truncate (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20));
- 插入测试数据
INSERT INTO t_truncate (name) VALUES ('A'), ('B'), ('C');
- 查看测试表
select * from t_truncate;
- 查看建表结构,AUTO_INCREMENT=4
- 截断表,注意受影响的⾏数是0
- 再次查看表结构,AUTO_INCREMENT=2
3.3 Truncate注意事项
- 只能对整表操作,不能像DELETE⼀样针对部分数据
- 不对数据操作所以⽐DELETE更快,TRUNCATE在删除数据的时候,不经过真正的事务,所以⽆法回滚
- 会重置AUTO_INCREMENT项(即自增主键会被重置)
4. 插入查询结果
4.1 语法
INSERT INTO table_name [(column [, column ...])] SELECT ...
5. 聚合函数
5.1 常用函数
函数 | 说明 |
---|---|
COUNT([DISTINCT]expr) | 返回查询到的数据的数量 |
SUM([DISTINCT]expr) | 返回查询到的数据的总和,不是数字没有意义 |
AVG([DISTINCT] expr) | 返回查询到的数据的平均值,不是数字没有意义 |
MAX([DISTINCT] expr) | 返回查询到的数据的最⼤值,不是数字没有意义 |
MIN([DISTINCT] expr) | 返回查询到的数据的最⼩值,不是数字没有意义 |
5.2 示例
5.2.1 COUTN
5.2.2 SUM
5.2.3 AVG
5.2.4 MAX MIN
6. Groupby分组查询
GROUPBY⼦句的作⽤是通过⼀定的规则将⼀个数据集划分成若⼲个⼩的分组,然后针对若⼲个分组进⾏数据处理,⽐如使⽤聚合函数对分组进⾏统计。
6.1 语法
SELECT {col_name |expr} ,... ,aggregate_function (aggregate_expr)FROM table_referencesGROUP BY {col_name|expr},...[HAVING]where_condition]
- col_name|expr:要查询的列或表达式,可以有多个,必须在
GROUP BY
⼦句中作为分组的依据 - aggregate_function:聚合函数,⽐如COUNT(),SUM(),AVG(),MAX(),MIN()
- aggregate_expr:聚合函数传⼊的列或表达式,如果列或表达式不在
GOURP BY
⼦句中,必须包含中聚合函数中
6.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;
6.3 having⼦句
由于执行SQL 语句中不同的关键字执行顺序不一样,我们在分组后还想对分组后的表做条件过滤查询就不能使用where语句了,此时我们引进了一个新的语句 having 语句
select role, avg(salary) from emp group by role having avg(salary) < 1200;
6.4 Having与Where的区别
- Having⽤于对分组结果的条件过滤
- Where⽤于对表中真实数据的条件过滤
7. 内置函数
MySQL内部实现了一些函数,可以直接拿来使用,但是我们需要注意,一般对于数据处理的问题,在应用程序中完成,不要放在数据库里面处理
日期函数
字符串函数
数学函数