1、限制查询结果的数量
使用Limit子句来限制Select语句返回的行数,Limit后接起始位置,特别注意的地方是第一条记录的起始位置是0。
语法格式:select 字段名1,字段名2 from 表名 Limit 起始位置,显示行数;
或者select 字段名1,字段名2 from 表名 Limit 行数 OFFSET 起始位置;
例子:查询成绩排名第3至第5的学生学号、课程号和成绩;
方法一:
select studentNo,courseNo,score from tb_score order by score Desc Limit 2,3;
方法二:
select studentNo,courseNo,score from tb_score order by score Desc Limit 3
OFFSET 2;
2、分组聚合查询
分组聚合查询:在Select语句中使用Group by子句对数据进行分组运算,Group by对查询结果按字段列进行分组,字段值相等的记录分为一组,用于分组的字段列表可以是一列,也可以是多个列,字段之间用逗号分隔,having条件语句对分组结果进行过滤,子句Group by的使用必须注意一下几点:
Group by子句中每个字段必须是检索列或有效的表达式,但不能是聚合函数,Select语句中使用表达式,必须在group by子句中制定相同的表达式,不能使用别名;
除聚合函数之外,Select子句中的每个列都必须在group by子句中给出;
分组的列中含有NULL值,则NULL将作为一个单独的分组返回,如果该列中存在多个NULL值,则将这些NULL值所在的行分为一组。
语法格式:
select 字段列表,聚合函数(字段名) from 表名 group by 字段列表 having 条件;
例子1:查询各个课程号及相应的选课人数;
Select courseNo,Count(studentNo) from tb_score group by courseNo;
例子2:查询每个学生的选课门数、平均分和最高分;
Select studentNo,count() as 选课门数,avg(score) 平均分,max(score) 最高分 from tb_score group by studentNo;
例子3:查询平均分在80分以上的每个同学的选课门数、平均分和最高分;
Select studentNo,count() 选课门数,avg(score) 平均分,max(score) 最高分 from tb_score group by studentNo having avg(score)>=80;
例子4:查询所有学生选课的平均成绩,但只有当平均成绩大于80的情况下才输出;
Select avg(score) 平均分 from tb_score having avg(score)>=80;
例子5:查询有2门以上(含2门)课程成绩大于88分的学生学号及(88分以上的)课程 数;
Select studentNo,count() 课程数 from tb_score where score>88 group by studentNo having count()>=2;