4、筛选分页结果
- 语法:
-- 起始下标为 0 -- 从 0 开始,筛选 n 条结果 SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n; -- 从 s 开始,筛选 n 条结果 SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n; -- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用 SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
建议:对未知表进行查询时,最好加一条 LIMIT 1,避免因为表中数据过大,查询全表数据导致数据库卡死
- 示例:按 id 进行分页,每页 3 条记录,分别显示 第 1、2、3 页
三、Update
- 语法:
UPDATE table_name SET column = expr [, column = expr ...] [WHERE ...] [ORDER BY ...] [LIMIT ...]
对查询到的结果进行列值更新
- 示例:
- 将孙悟空同学的数学成绩变更为 80 分
- 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
- 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分
- 将所有同学的语文成绩更新为原来的 2 倍
注:更新全表的语句慎用
四、Delete
1、删除数据
- 语法:
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
- 删除孙悟空同学的考试成绩
- 删除整张表数据
注:删除整表操作要慎用
2、截断表
- 语法:
TRUNCATE [TABLE] table_name
- 注意:
- 只能对整表操作,不能像 DELETE 一样针对部分数据操作
- 实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是TRUNCATE在删除数据的时候,并不经过真正的事物,所以无法回滚
- 会重置 AUTO_INCREMENT 项
五、插入查询结果
- 语法:
INSERT INTO table_name [(column [, column ...])] SELECT ...
- 示例:删除表中的的重复复记录,重复的数据只能有一份
六、聚合函数
函数 | 说明 |
COUNT([DISTINCT] expr) | 返回查询到的数据的 数量 |
SUM([DISTINCT] expr) | 返回查询到的数据的 总和,不是数字没有意义 |
AVG([DISTINCT] expr) | 返回查询到的数据的 平均值,不是数字没有意义 |
MAX([DISTINCT] expr) | 返回查询到的数据的 最大值,不是数字没有意义 |
MIN([DISTINCT] expr) | 返回查询到的数据的 最小值,不是数字没有意义 |
- 示例:
- 统计班级共有多少同学;统计班级收集的 qq 号有多少
- 统计本次考试的数学成绩分数个数
- 统计数学成绩总分
- 统计平均总分
- 返回英语最高分
- 返回 > 70 分以上的数学最低分
七、group by
在select中使用group by 子句可以对指定列进行分组查询
select column1, column2, .. from table group by column;
- 示例:
准备工作,创建一个雇员信息表(来自oracle 9i的经典测试表)
EMP员工表
DEPT部门表
SALGRADE工资等级表
- 显示每个部门的平均工资和最高工资
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的部门和它的平均工资
select avg(sal) as myavg from EMP group by deptno having myavg<2000; -- having和group by配合使用,对group by结果进行过滤 -- having经常和group by搭配使用,作用是对分组进行筛选,作用有些像where
门的平均工资和最高工资
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的部门和它的平均工资
select avg(sal) as myavg from EMP group by deptno having myavg<2000; -- having和group by配合使用,对group by结果进行过滤 -- having经常和group by搭配使用,作用是对分组进行筛选,作用有些像where