SQL语句——DQL语句之排序查询,聚合函数,分组查询,分页查询

 

目录

 

排序查询

升序排序

降序排序

复合排序

聚合函数

count函数

MAX函数

MIN函数

SUM函数

AVG函数

分组查询

having 与 where 的区别

分页查询


排序查询

语法:order by 排序字段1 排序方式1 ,排序字段2 排序方式2...

排序方式:
ASC:升序(从小到大),默认的排序方式,可省略
DESC:降序(从大到小),不能省略

注意:如果有多个排序条件,则当前边的条件值一样时,才会判断第二个排序条件。

升序排序

按数学成绩升序排序

SELECT * FROM student  ORDER BY math ASC;

降序排序

按数学成绩降序排序

SELECT * FROM student  ORDER BY math DESC;

复合排序

先按照数学成绩升序排序,如果数学成绩一样,就按英语成绩降序排序

SELECT * FROM student  ORDER BY math ASC , english DESC;

聚合函数

聚合函数是将一列数据作为整体,进行纵向运算。注意当聚合函数在运算时会排除NULL值得到的结果都是单行单列的运算结果值
注意:where 条件后面不能接聚合函数

聚合函数我们今天要学习的有如下几个:

1. count:计算个数
2. max:计算最大值
3. min:计算最小值
4. sum:计算和
5. avg:计算平均值

count函数

计算有效行数

计算student表中ID列不为null的函数

SELECT COUNT(ID) FROM student;

计算student表中所有列都不为NULL的记录的行数,如果一行的字段值都为NULL,则不计数

MAX函数

计算数学成绩最大值

SELECT MAX(math) FROM student;

MIN函数

计算数学成绩最小值

SELECT MIN(math) FROM student;

SUM函数

计算英语成绩的和

英语成绩中的NULL会被当做0计算

SELECT SUM(english) FROM student;

AVG函数

计算英语成绩的平均值
计算平均值只会除以不为英语成绩不为NULL的行数:7行

SELECT AVG(english) FROM student;

分组查询

分组查询需要列肯定是有重复的属性值才分组,如果这一列每行的值都不一样,那分组就没意义了
分组查询是把记录使用某一列进行分组,然后统计组信息
总体思路:select 分组列,聚合函数 group by 分组列

按性别进行分组,求男生和女生数学的平均分

SELECT sex, AVG(math) FROM student GROUP BY sex;

查询年龄大于 25 岁的人,按性别分组,统计每组的人数

SELECT sex, COUNT(*) FROM student WHERE age > 25 GROUP BY sex ;

查询年龄大于 25 岁的人,按性别分组,统计每组的人数,并只显示性别人数大于 2 的数据

SELECT sex, COUNT(*) FROM student WHERE age > 25 GROUP BY sex HAVING COUNT(*) >2;

having 与 where 的区别

子句名作用
where 子句

1) 对查询结果进行分组前,将不符合 where 条件的行去掉,即在分组之前过滤数据,即先过滤再分组。

2) where 后面不可以使用聚合函数

having 子句

1) having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,即先分组再过滤。

2) having 后面可以使用聚合函数

分页查询

语法:limit 后面跟两个参数:开始的索引,每页查询的条数;

例子:比如我们看百度,每页十条,从第一页开始,一直到第n页

那么前端就要传给后端两个参数page_num (第几页),page_size(每一页显示多少条数据)

当我们对学生表进行分页显示时,假如说每页显示3条:

SELECT * FROM student LIMIT 0,3; -- 第1页

当查询第一页的时候,数据库起始行为0,行数为3条

SELECT * FROM student LIMIT 3,3; -- 第2页

当查询第二页的时候,数据库起始行为3,行数为3条

SELECT * FROM student LIMIT 6,3; -- 第3页

当查询第三页的时候,数据库起始行为6,行数为3条

其实的索引是从0开始的,每页显示的记录数是3条

从上面我们可以总结出数据库起始行与当前页的关系

数据库起始行(起始索引)=(当前页-1) * 每页记录数

而limit关键字是mysql的方言,只能使用在mysql数据库中,其他数据库有自己的分页操作

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值