单表查询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;
来源:oschina
链接:https://my.oschina.net/u/4396805/blog/4493703