CRUD3
1. 更新(Update)操作
- 语法: UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET assignment [, assignment ...] [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
- UPDATE 是关键字,指定要更新数据的表。
- SET 用于指定要更新的列及其新值 。
- WHERE 子句用于筛选符合条件的行进行更新,如果不写则会更新表中所有行。
- ORDER BY 可对更新的行进行排序。
- LIMIT 限制更新的行数。
- 示例
- 将孙悟空同学的数学成绩变更为80分:
update exam set math = 80 where name = '孙悟空';
- 将曹孟德同学的数学成绩变更为60分,语文成绩变更为70分:
update exam set math = 60, chinese = 70 where name = '曹孟德';
- 把唐三藏的英语成绩加10分:
update exam set english = english + 10 where name = '唐三藏';
- 将所有同学的语文成绩更新为原来的2倍:
update exam set chinese = chinese * 2;
2. 删除(Delete)操作
- 语法: DELETE FROM table_name [WHERE where_condition]
- DELETE FROM 后跟表名,指定要删除数据的表。
- WHERE 子句用于筛选符合条件的行进行删除,若不写会删除表中所有行。
- 示例
- 删除孙悟空同学的考试成绩:
delete from exam where name = '孙悟空';
- 不添加条件删除整张表数据(危险操作):
delete from t_delete;
3. 截断表(Truncate)操作
- 语法: TRUNCATE [TABLE] tbl_name
- 作用是把表恢复到刚创建的状态,删除表中所有数据,且会重置自增长列。
- 效率比 DELETE 高, DELETE 只是删除数据,不改变表结构状态。
4. 聚合函数
- 常用聚合函数
- COUNT([DISTINCT] expr) :统计符合条件的记录条数, * 表示统计所有行,指定列时会过滤掉该列值为NULL的记录 。
- SUM([DISTINCT] expr) :返回查询到数据的总和,只对数字列有意义,NULL值不参与运算 。
- AVG([DISTINCT] expr) :返回查询到数据的平均值,只对数字列有意义,NULL值不参与运算 。
- MAX([DISTINCT] expr) :返回查询到数据的最大值,只对数字列有意义。
- MIN([DISTINCT] expr) :返回查询到数据的最小值,只对数字列有意义。
- 示例
- 统计exam表中有多少记录:
select count(*) from exam;
- 统计语文成绩小于50分的学生个数:
select count(*) from exam where chinese < 50;
- 统计所有学生数学成绩总分:
select sum(math) as 数学总分 from exam;
- 统计英语成绩的平均分:
select avg(english) as 英语平均分 from exam;
5. 分组查询(Group By)
- 语法: SELECT [DISTINCT] select_expr [, select_expr ...] FROM table_references [WHERE where_condition] GROUP BY {col_name | expr} [, ...] [HAVING where_condition] [ORDER BY {col_name | expr} [ASC | DESC] [, ...]] [LIMIT {[offset,] row_count | row_count OFFSET offset}]
- GROUP BY 用于通过一定规则将数据集划分成若干小组,然后可使用聚合函数对分组进行统计。
- HAVING 子句用于对分组后的结果进行过滤,当使用 GROUP BY 分组后,不能再用 WHERE 子句过滤分组结果,要用 HAVING 。
- 示例
- 统计每个角色的人数:
select role, count(*) from emp group by role;
- 显示平均工资低于1500的角色和它的平均工资:
select role, avg(salary) from emp group by role having avg(salary) < 1500;
6. 分页查询(Limit)
- 语法: SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT num OFFSET start; 或 SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT start, num;
- LIMIT 用于限制查询结果返回的记录数, num 表示要查询的记录数, start 表示偏移量(从0开始)。
- 示例
- 查询exam表前3条记录:
select * from exam limit 3;
- 查询exam表从第3条记录开始的3条记录(即第3 - 5条记录):
select * from exam limit 2, 3; -- 或者写成 select * from exam limit 3 offset 2;
7. 插入查询结果
- 语法: INSERT INTO table_name [(column [, column ...])] SELECT ...
- 可将一个查询的结果插入到指定表中,查询出来的列与 INSERT 中的列要对应。
- 示例
- 创建与 t_recorded 表结构相同的表 t_recorded_new ,并将 t_recorded 表去重后的记录写入新表:
create table t_recorded_new like t_recorded;
insert into t_recorded_new (id, name) select distinct id, name from t_recorded;