DQL:查询语句
1)排序查询
语法:order by 子句
order by 排序字段1 排序方式1,排序字段2 排序方式2...
排序方式:
ASC:升序,默认
DESC:降序
栗子:
select * from student order by math ASC; -- 升序,单条件
select * from student order by math ASC, english DESC; -- 多条件。数学成绩一样时,按照英语成绩来排名
注意:多条件排序时,只有当第一条件一样时,才会判断第二条件
2)聚合函数
将一列数据作为一个整体,进行 纵向 的运算
① count:计算个数
一般选择非空的列,比如主键
count(*)
select count(id) from student; -- 选择主键来计数,一般设置id为主键
select count(ifnull(english,0)) from student; -- 当选择的列中存在null值的时候,可以用ifnull关键字来处理
select count(*) from student; -- 当选择的列中存在null值的时候,也可以选择这种方式(但是公司里有可能不让使用*)
② max:计算最大值
select max(math) from student;
③ min:计算最小值
select min(math) from student;
④ sum:计算和
select sum(math) from student;
⑤ avg:计算平均值
select avg(math) from student;
注意:聚合函数的计算会排除null值
解决方案:
①选择不包含null值的列进行计算
②ifnull函数,将null值替换为其他值,比如0
3)分组查询
语法:group by 分组字段;
栗子:
-- 根据sex字段分组,分别查询男、女同学的数学平均分、人数
SELECT sex, AVG(math), COUNT(id) FROM student GROUP BY sex;
-- 按照sex字段分组,分别查询男、女同学的数学平均分,人数 要求:分数低于70分的人不参与分组
SELECT sex, AVG(math), COUNT(id) FROM student WHERE math>70 GROUP BY sex;
-- 按照性别分组,分别查询男、女同学的平均分,人数 要求:分数低于70分的人不参与分组,并且人数要大于2个人
SELECT sex, AVG(math), COUNT(id) FROM student WHERE math>70 GROUP BY sex HAVING COUNT(id)>2;
SELECT sex, AVG(math), COUNT(id) 人数 FROM student WHERE math>70 GROUP BY sex HAVING 人数>2;
注意:
① 分组之后查询的字段:分组字段、聚合函数
② where 和 having 的区别
1.where在分组之前限定,如果不满足这个条件就不参与分组,having是在分组之后限定,如果不满足结果则不会被查询出来。
2.where后不可以跟聚合函数,having可以进行聚合函数的判断。
4)分页查询
语法:limit 开始的索引,查询的条数;
公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
-- 每页显示3条记录
SELECT * FROM student LIMIT 0, 3; -- 显示第1页
SELECT * FROM student LIMIT 3, 3; -- 显示第2页
SELECT * FROM student LIMIT 6, 3; -- 显示第3页
注意:limit关键字是MySQL实现分页查询的一个"方言"