MySQL第七篇------DQL( 查询单表中数据之排序、聚合、分组、分页 重要)

版权声明:未经本人同意不得转载 https://blog.csdn.net/object_oriented_/article/details/87889306

第六篇讲述了基本查询和条件查询,这篇是继第六篇的内容讲述单表分组、排序、分页查询和聚合函数
DQL:查询表中的记录
           语法:
                        select
                            字段列表
                        from
                            表名列表
                        where
                            条件列表
                        group by
                            分组字段
                        having
                            分组之后的条件
                        order by
                            排序
                        limit
                            分页限定

   1. 排序查询   
                      语法:
                          order by 子句       
                          order by 排序字段1 排序方式1 , 排序字段2 排序方式2...  

                      排序方式: 
                             ASC: 升序排列 不指定就默认
                             DESC: 降序排列

                     1) 根据数学成绩查询
                                               SELECT * FROM stu ORDER BY math; -- 默认升序
                                               SELECT * FROM stu ORDER BY math DESC; -- 降序
                                               
                                               
                      2) 按照数学成绩排名, 如果数学成绩有一样的, 再按照英语成绩排名
                                               select * from stu order by math asc , english asc;     
                                               
                                    注意
                                                       * 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。
                                                          每一个不同的排序都可以指定不同的排序方式
                                                          select * from stu order by math asc , english desc;

   2. 聚合函数  
                     1) 聚合函数:  将一列数据作为一个整体,进行纵向的计算。

聚合函数 含义
count 计算个数    1. 一般选择非空的列:主键id
                   2. count(*)
max 计算最大值
min 计算最小值
sum 计算和
avg 计算平均值

                         注意: * 聚合函数的计算,排除null值。就是说计算的这列数据如果有null,不参与计算也不计数
                                     解决方法:
                                                    1. 选择不包含非空的列进行计算,可以选择主键(推荐这种方法)
                                                    2. IFNULL函数   
                                    

                       2)  SELECT MAX(math) FROM stu; -- 求数学的最大值
                            SELECT MIN(math) FROM stu; -- 求数学的最小值
                            SELECT SUM(math) FROM stu; -- 求数学的和值
                            SELECT AVG(math) FROM stu; -- 求数学的平均值

         
    3. 分组查询
               1)  语法:group by 分组字段;
              
2) 注意:
                   *1 分组之后查询的字段:分组字段、聚合函数
                   *2 where 和 having 的区别?

子名 作用
where 子句 1) 对查询结果进行分组前, 将不符合 where 条件的行去掉, 即在分组之前过滤数据,
即先过滤再分组
2) where 后面不可以使用聚合函数
having 子句 1) having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,即先分组再过滤
2) having 后面可以使用聚合函数

             3)  分组查询实例
                     -- 按照性别分组。分别查询男、女同学的平均分
                           SELECT sex , AVG(math) FROM stu GROUP BY sex;
                             

                     -- 按照性别分组。分别查询男、女同学的平均分,人数
                           SELECT sex , AVG(math),COUNT(id) FROM stu GROUP BY sex;
                            

                     --  按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组
                           SELECT sex , AVG(math),COUNT(id) FROM stu WHERE math > 70 GROUP BY sex;
                             
                           注意分组之后不要加其他的字段,其他字段是没有意义的,例如 name字段 如下展示
                                                     

--  按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后,人数要大于2个人
        SELECT sex , AVG(math),COUNT(id) FROM stu WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2; 
        聚合函数后面可以跟别名
        SELECT sex , AVG(math),COUNT(id) 人数 FROM stu WHERE math > 70 GROUP BY sex HAVING 人数 > 2;   
                      
        

   4. 分页查询
          1) 语法:
                       limit 开始的索引,每页查询的条数;
               注意 *limit 是一个MySQL"方言"
          2) 公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数

          3)每页显示3条记录 
                SELECT * FROM stu LIMIT 0,3; -- 第1页
                            
                SELECT * FROM stu LIMIT 3,3; -- 第2页
                          
                SELECT * FROM stu LIMIT 6,3; -- 第3页
                           

                                                             <单表查询到此结束>

猜你喜欢

转载自blog.csdn.net/object_oriented_/article/details/87889306