单表查询2(ORDER BY子句、聚集函数、GROUP BY子句)

99封情书 提交于 2020-10-13 00:01:17

单表查询2

ORDER BY子句
可以按一个或多个属性排列。升序:ASC 降序:DESC,缺省为升序
对于空值,排序时显示的次序由具体系统实现来决定
例1.1:查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列:


SELECT Sno,Grade,
FROM Cno='3'
ORDER BY Grade DESC;

聚集函数
计数:
COUNT([DISTINCT|ALL]*)
COUNT([DISTINCT|ALL]<列名>)
例1.2:查询学生总人数:



SELECT COUNT(*)
FROM Student;

例1.3:查询选修了课程的学生人数

SELECT COUNT(DISTINCT Sno)
FROM SC;

计算平均值:
AVG([DISTINCT|ALL]<列名>)
例1.4:计算1号课程的学生平均成绩

SELECT AVG(Grade)
FROM SC
WHERE Cno='1';

最大最小值:
MAX([DISTINCT|ALL]<列名>)
MIN([DISTINCT|ALL]<列名>)
例1.5:查询选修1号课程的学生最高分数:


SELECT MAX(Grade)
FROM SC
WHERE Cno='1';

计算总和:SUM([DISTINCT|ALL]<列名>)
例1.6:查询学生200215012选修课程的总学分数:

SELECT SUM(Ccredit)
FROM SC,Course
WHERE Sno='200015012' AND SC.Cno=Course.Cno;

在这里插入图片描述

GROUP BY 子句:细化聚集函数的作用对象
按指定的一列或多列值分组,值相等的为一组
例1.7:求各个课程号及相应选课人数:

SELECT Cno,COUNT(Sno)
FROM SC
GROUP BY Cno;

查询结果:在这里插入图片描述
例1.8:查询学生人数大于100的系及对应的人数:

SELECT Sdept,COUNT(Sno)
FROM student
GROUP BY Sdept
HAVING COUNT(*)>100;

HAVING短语与WHERE子句的区别:
在这里插入图片描述
例1.9:查询平均成绩大于等于90分的学生学号和平均成绩:
SELECT Sno,AVG(Grade)
FROM SC
WHERE AVG(Grade)>=90
GROUP BY Sno;
该种解法是错误的,因为:在WHERE子句中是不能用聚集函数作为条件表达式
所以正确解法:







SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno
HAVING AVG(Grade)>=90;
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!