MySQL——DQL数据查询(排序、聚合、分组、分页查询)
文章目录
- DQL查询语句一般分为4种
- 排序查询
- 聚合函数
- 分组查询
- 分页查询
1、排序查询
- 通过 ORDER BY 子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序)
1.语法:
- ORDER BY 子句
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 [ASC|DESC];
-- ASC 升序(默认)
-- DESC 降序
2.单列排序
- 定义:只有按照某一字段进行排序,称为单列排序;
-- 查询stu表中所有数据,使用age(年龄)降序排序
select * from stu order by age desc;
3.组合排序
- 定义:同时对多个字段进行排序,如果第 1 个字段相等,则按第 2 个字段排序,依次类推;
- 语法:
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 1 [ASC|DESC], 字段名 2 [ASC|DESC];
- 示例:
-- 查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩升序排序
select * from student order by age desc, math asc;
2、聚合函数
- 使用聚合函数查询是纵向查询, 将一列数据作为一个整体,进行纵向的计算。 (聚合函数会忽略空值 NULL)
- 语法:SELECT 聚合函数(列名) FROM 表名;
1.五个聚合函数
聚合函数 | 作用 |
---|---|
count | 计算个数 |
max | 计算最大值 |
min | 计算最小值 |
sum | 计算和 |
avg | 计算平均值 |
2.示例
语句 | 作用 |
---|---|
SELECT COUNT(NAME) FROM stu; | 计算stu表中name的个数 |
SELECT MAX(math) FROM stu | 计算stu表中数学(math)最高分 |
SELECT mn(math) FROM stu | 计算stu表中数学(math)最低分 |
SELECT SUM(math) FROM stu; | 计算stu表中数学(math)总分数 |
SELECT AVG (math) FROM stu; | 计算stu表中数学(math)平均分 |
-
注意:使用聚合函数时,一般使用主键和非空列,因为几何函数会忽略NULL值,也就是不会统计NULL值的记录。但是 如果要记录NULL值呢?
-
以利用 IFNULL()函数,如果记录为 NULL,给个默认值,这样统计的数据就不会遗漏
示例:
-- 统计stu表中id的个数,如果id为NULL,使用0代替 select count(ifnull(id,0)) from stu;
3、分组查询
- 分组查询是指使用 GROUP BY 语句对查询信息进行分组,相同数据作为一组 ;
- 如何分组:将分组字段结果中相同内容作为一组,如按性别将学生分成 2 组。
- 一般分组查询是和聚合函数一起使用,因为单独使用分组查询没有什么用处;
1.语法
-
group by 分组字段;
-
注意:使用分组查询只能查询 分组字段和聚合函数 ,不能再查询其他字段
-- NAME会显示,但是显示是无效的 SELECT sex,NAME,VAG(math) FROM stu GROUP BY sex;
2.示例
-
示例一:查询stu表中分别求出男生和女生的平均分
-- 按性别进行分组,求男生和女生数学的平均分 select sex, avg(math) from stu group by sex;
- 过程:先分组,后统计每组的平均值
-
示例二:统计stu表哦中男生和女生的人数
-- 查询所有数据,按性别分组,统计每组人数 select sex, count(*) from stu group by sex;
- 过程:先分组,后统计每组人数
- 注意:当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的 ;
-
示例三:查询年龄大于 25 岁的人,按性别分组,统计每组的人数
select sex,count(*) from stu where age>25 groud by sex;
-
示例四:查询年龄大于 25 岁的人,按性别分组,统计每组的人数,并只显示性别人数大于 2 的数据
- 错误写法
SELECT sex, COUNT(*) FROM stu WHERE age > 25 GROUP BY sex WHERE COUNT(*) >2;
- 正确写法
-- 对分组查询的结果再进行过滤 SELECT sex, COUNT(*) FROM stu WHERE age > 25 GROUP BY sex having COUNT(*) >2;
3.having和where的区别
4.总结:
-
使用聚合函数只能查询分组字段和聚合函数
-
使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的
-
where后面不能使用聚合函数,改为having
4、分页查询
-
LIMIT 是限制的意思,所以 LIMIT 的作用就是限制查询记录的条数。 SELECT *|字段列表 [as 别名] FROM 表名 [WHERE子句] [GROUP BY子句][HAVING
SELECT * |字段列表 [as 别名] FROM 表名 [WHERE子句] [GROUP BY子句] [HAVING子句] [ORDER BY子 句][LIMIT 子句]
1.语法:
-
LIMIT offset,length;
-
起始行数,从 0 开始计数,如果省略,默认就是 0
-
显示的行数
-
2.示例:
-- 查询学生表中数据,从第3条开始显示,显示6条。
select * from student3 limit 2,6;