4. DQL查询语句-排序和分组

第一部分 DQL查询语句

1.1 排序

asc 升序,默认值

desc 降序

通过order by 子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序)

-- 语句
select * from 表名 where 字段=order by 字段名 [asc];
1.1.1 单列排序

什么是单列排序?
只按某一个字段进行排序

-- 查询所有数据,使用年龄降序排序
select * from student order by age desc;
1.1.2 组合排序

什么是组合排序?
同时对多个字段进行排序,如果第 1 个字段相等,则按第 2 个字段排序,依次类推。

select * from 表名 where 字段=order by 字段名 1 [ASC|DESC], 字段名 2 [ASC|DESC];


-- 查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩升序排序
select * from student order by age desc, math asc;

1.2 聚合函数

之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个结果值。聚合函数会忽略空值 null。

SQL 中的聚合函数作用
max(列名)求这一列的最大值
min(列名)求这一列的最小值
avg(列名)求这一列的平均值
count(列名)统计这一列有多少条记录
sum(列名)对这一列求总和
select 聚合函数(列名) from 表名;

-- 查询学生总数
select count(id) as 总人数 from student;
select count(*) as 总人数 from student;

通过演示发现对于 null 的记录不会统计,建议如果统计个数则不要使用有可能为 null 的列。

但如果需要把 null也统计进去呢?怎么办?

-- 如果列名不为空,返回这列的值。如果为 NULL,则返回默认值。
ifnull(列名,默认值) 

-- 查询 id字段,如果为 null,则使用 0代替
select ifnull(id,0) from student;


-- 可以利用 ifnull()函数,如果记录为 null,给个默认值,这样统计的数据就不会遗漏
select count(ifnull(id,0)) from student;

-- 查询年龄大于 20的总数
select count(*) from student where age>20;

-- 查询数学成绩总分
select sum(math) 总分 from student;

-- 查询数学成绩平均分
select avg(math) 平均分 from student;

-- 查询数学成绩最高分
select max(math) 最高分 from student;

-- 查询数学成绩最低分
select min(math) 最低分 from student;

1.3 分组

分组查询是指使用 group by 语句对查询信息进行分组,相同数据作为一组。

select 字段 1,字段 2... from 表名 group by 分组字段 [having 条件];
-- group by 将分组字段结果中相同内容作为一组,并且返回每组的第一条数据,所以单独分组没什么用处。

分组的目的就是为了统计,一般分组会跟聚合函数一起使用

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

-- 按性别进行分组,求男生和女生数学的平均分
select sex, avg(math) from student group by sex;
-- 演示效果见下表:
sexavg(math)
98.50
99.50

实际上是将每组的 math 求了平均,返回每组统计的结果

-- 查询年龄大于 25 岁的人,
-- 按性别分组,统计每组的人数,
-- 并只显示性别人数大于 2 的数据
select sex,count(*) from student where age > 25 group by sex having count(*)>2;

注意:group by 后面不要用where

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

1.4 limit语句

limit的作用:

限制的意思,作用就是限制查询记录的条数。

select * from 表名 [where 字句] [group by 字句] [having 字句] [order by字句] [limit 字句];

-- limit语法格式: limit offset,length
-- offset:起始行数, 从0开始计数,如果省略,默认就是 0
-- length: 返回的行数

-- 演示
-- 查询学生表中数据,从第3条开始显示,显示6条。
  select * from student limit 2,6;
LIMIT 的使用场景:

分页:比如我们登录京东,淘宝,返回的商品信息可能有几万条,不是一次全部显示出来。是一页显示固定的条数。 假设我们每页显示 5 条记录的方式来分页。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值