MySQL——DQL数据查询(排序、聚合、分组、分页查询)

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.示例
  1. 示例一:查询stu表中分别求出男生和女生的平均分

    -- 按性别进行分组,求男生和女生数学的平均分 
    select sex, avg(math) from stu group by sex; 
    

    在这里插入图片描述

    • 过程:先分组,后统计每组的平均值
  2. 示例二:统计stu表哦中男生和女生的人数

    -- 查询所有数据,按性别分组,统计每组人数
    select sex, count(*) from stu group by sex; 
    
    • 过程:先分组,后统计每组人数
    • 注意:当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的 ;
  3. 示例三:查询年龄大于 25 岁的人,按性别分组,统计每组的人数

    select sex,count(*) from stu where age>25 groud by sex;
    
    
  4. 示例四:查询年龄大于 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.总结:
  1. 使用聚合函数只能查询分组字段和聚合函数

  2. 使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的

  3. 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; 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值