sql语句中的聚合函数
Max Min Sum Avg Count(*) Count
Group By语句和having语句的用法
该数据库在sql server 2005的tests2
Select SNAME FROM STUDENTS
Where AGE > (Select AVG(AGE) FROM STUDENTS)
找出各课程的平均成绩,按课程号分组,且只选择学生超过 3 人的课程的成绩。( GROUP BY 与 HAVING
GROUP BY 子句把一个表按某一指定列(或一些列)上的值相等的原则分组,然后再对每组数据进行规定的操作。
GROUP BY 子句总是跟在 Where 子句后面,当 Where 子句缺省时,它跟在 FROM 子句后面。
HAVING 子句常用于在计算出聚集之后对行的查询进行控制。)
程序代码
Select CNO, AVG(GRADE), STUDENTS = COUNT(*) FROM ENROLLS
GROUP BY CNO HAVING COUNT(*) >= 3
查询没有选任何课程的学生的学号和姓名。(当一个子查询涉及到一个来自外部查询的列时,称为相关子查询( Correlated Subquery) 。 相关子查询要用到存在测试谓词 EXISTS 和 NOT EXISTS ,以及 ALL 、 ANY ( SOME )等。)
程序代码
Select SNO, SNAME FROM STUDENTS Where NOT EXISTS
(Select * FROM ENROLLS Where ENROLLS.SNO=STUDENTS.SNO)
例 37 查询没有选任何课程的学生的学号和姓名。(当一个子查询涉及到一个来自外部查询的列时,称为相关子查询( Correlated Subquery) 。 相关子查询要用到存在测试谓词 EXISTS 和 NOT EXISTS ,以及 ALL 、 ANY ( SOME )等。)
程序代码
Select SNO, SNAME FROM STUDENTS Where NOT EXISTS
(Select * FROM ENROLLS Where ENROLLS.SNO=STUDENTS.SNO)
例 38 查询哪些课程只有男生选读。
程序代码
Select DISTINCT CNAME FROM COURSES C
Where ' 男 ' = ALL
(Select SEX FROM ENROLLS , STUDENTS Where ENROLLS.SNO=STUDENTS.SNO AND ENROLLS.CNO=C.CNO)
例 39 要求给出一张学生、籍贯列表,该表中的学生的籍贯省份,也是其他一些学生的籍贯省份。
程序代码
Select SNAME, BPLACE FROM STUDENTS A Where EXISTS
(Select * FROM STUDENTS B Where A.BPLACE=B.BPLACE AND A.SNO < > B.SNO)