一、SQL 语句进行排序
ORDER BY 子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序)
SELECT 字段名 FROM 表名 WHERE 字段= ORDER BY 字段名 [ASC|DESC];
ASC: 升序,默认值
DESC: 降序
1.1 单列排序:
只按某一个字段进行排序,单列排序。
select * from student order by score desc;
1.2 组合排序:
同时对多个字段进行排序,如果第 1 个字段相等,则按第 2 个字段排序,依次类推。
组合排序的语法:SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 1 [ASC|DESC], 字段名 2 [ASC|DESC];
--查询所有的数据 按照分数倒叙最高在最前面,年龄相同按照年纪正序,年龄越小在越前面
select * from student order by score desc , age asc;
二、聚合函数
max(列名) 求这一列的最大值
min(列名) 求这一列的最小值
avg(列名) 求这一列的平均值
count(列名) 统计这一列有多少条记录
sum(列名) 对这一列求总和
语法:SELECT 聚合函数(列名) FROM 表名
-- 查询学生总数
select count(id) as 总人数 from student;
select count(*) as 总人数 from student;
对于 NULL 的记录不会统计,建议如果统计个数则不要使用有可能为 null 的列,但如果需要把 NULL也统计进去呢?
-- 查询 id 字段,如果为 null,则使用 0 代替
select ifnull(id,0) from student;
我们可以利用 IFNULL()函数,如果记录为 NULL,给个默认值,这样统计的数据就不会遗漏
select count(ifnull(id,0)) from student;
三、SQL 语句进行分组查询
分组查询是指使用 GROUP BY 语句对查询信息进行分组,相同数据作为一组
语法:SELECT 字段 1,****字段 2... FROM 表名 GROUP BY 分组字段 [HAVING 条件****];
3.1 GROUP BY 怎么分组的?
将分组字段结果中相同内容作为一组,如按性别将学生分成 2 组。
GROUP BY 将分组字段结果中相同内容作为一组,并且返回每组的第一条数据,所以单独分组没什么用处。分组的目的就是为了统计,一般分组会跟聚合函数一起使用。
-----例子1: 按性别进行分组,求男生和女生数学的平均分(实际上是将每组的 score 求了平均,返回每组统计的结果)
注意:当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的
select sex, avg(score) from student group by sex;
------例子2:查询男女各多少人
select sex, count(*) from student group by sex;
------例子3:查询年龄大于 25 岁的人,按性别分组,统计每组的人数
**select sex, count(*) from student where age > 25 group by sex ; **
------ 例子4:查询年龄大于 25 岁的人,按性别分组,统计每组的人数,并只显示性别人数大于 2 的数据
只有分组后人数大于 2 的这组数据显示出来
**select sex, count() from student where age > 25 group by sex having count()>2 ; **
3.2 having 与 where 的区别
where 子句 :
- 对查询结果进行分组前,将不符合 where 条件的行去掉,即在分组之前过滤数据,即先过滤
再分组。
- where 后面不可以使用聚合函数
having 子句:
-
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,即先分组再过滤。
-
having 后面可以使用聚合函数
题目:select product,sum(price) from orders group by product where sum(price) > 30;
运行有误,group by 后面不能出现 where,使用 having
3.3 limit 语句
LIMIT 的作用就是限制查询记录的条数。
LIMIT 语法格式:LIMIT offset,length;
offset:起始行数,从 0 开始计数,如果省略,默认就是 0
length: 返回的行数
-- 查询学生表中数据,从第 3 条开始显示,显示 6 条。
select * from student3 limit 2,6;
LIMIT 的使用场景:
分页:比如我们登录京东,淘宝,返回的商品信息可能有几万条,不是一次全部显示出来。是一页显示固定的
条数。 假设我们每页显示 5 条记录的方式来分页。
-- 如果第一个参数是 0 可以省略写:select * from student limit 5;