一、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;
MySQL服务器设置权限 mysql设置权限语句
创建管理员:mysqladmin -u root password 123456 登录mysql -u root -p 建库及授权> create database bdp character set utf8;
> use bdp;
> grant all privileges on bd