1.语法
select
字段列表
from
表明列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
下面的操作都是在这个student表上进行的:
2.基础查询
查询每个学生的数学成绩,英语成绩和总分
SELECT NAME,math,IFNULL(english,0) AS english,math+IFNULL(english,0) AS '总分' FROM student;
3.条件查询
查询数学成绩在60到100之间的学生和其成绩
SELECT
NAME,math
FROM
student
WHERE
math BETWEEN 60 AND 100;
4.分组查询
聚合函数:将一列作为一个整体,进行纵向的计算
1.count 计算个数
2.max 计算最大值
3.min
4.sum
5.avg 计算平均值
注意:
1.分组之后查询的字段:分组字段和聚合函数,其它字段没有意义
2.where 和 having 的区别?
- a. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会查询出来
- b. where后不可以跟聚合函数,having可以进行聚合函数判断
查询男女同学的平均分
SELECT sex,AVG(math+english)AS AVG FROM student GROUP BY sex;
查询男女同学的平均分和人数
SELECT
sex,AVG(math+english)AS AVG,COUNT(id) AS COUNT
FROM
student
GROUP BY
sex;
按照性别分组。分别查询男、女学生的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2
SELECT
sex,AVG(math+english)AS '平均分',COUNT(id) AS '人数'
FROM
student
WHERE
math > 70
GROUP BY
sex
HAVING
COUNT(id)>2;
5.排序查询
语法:order by 排序字段1 排序方式1, 排序字段2 排序方式2
排序方式:
ASC:升序 默认
DESC:降序
注意:当有多个排序条件的时候,只有当前面的条件值是一样的时候,才会判断第二个条件
按照数学成绩排名,如果数学成绩一样则按照英语成绩排名
SELECT
*
FROM
student
ORDER BY
math DESC,english DESC;
分页查询
语法:limit 开始的索引 ,每页查询的条数
公式: 开始的索引 = (当前页码 - 1)* 每页显示的条数
** 注意limit是mysql的方言**
查询数学成绩排名前三的学生
SELECT
*
FROM
student
ORDER BY
math DESC
LIMIT
0,3;