版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
C#第十一章 连接查询和分组查询
--上机练习一
--练习--使用分组查询学生相关信息
--每个参加考试的学员的平均分
SELECT StudentNo, AVG(StudentResult)as 平均分
FROM dbo.Result
GROUP BY StudentNo
--每门课程的平均分,并按照降序排列
SELECT COUNT(StudentNo) AS 人数, AVG(StudentResult)AS 平均分,SubjectId AS 科目
FROM dbo.Result
GROUP BY SubjectId
ORDER BY AVG(StudentResult) DESC
--查询每个学生参加的所有的考试的总分,并按照降序排列
SELECT StudentNo AS 学员,sum(StudentResult)AS 总分
FROM dbo.Result
GROUP BY StudentNo
ORDER BY sum(StudentResult) DESC
--上机练习二
--指导--限定条件的分组查询
--每学期学时超过50的课程数
SELECT GradeId AS 学期,ClassHour AS 课程数
FROM dbo.Subject
GROUP BY GradeId,ClassHour
HAVING ClassHour>50
--考试的成绩中,平均分及格的学生记录,并按照成绩降序排序
SELECT AVG(StudentResult)AS 平均分 ,count(StudentResult) AS 及格人数
FROM dbo.Result
GROUP BY StudentResult
HAVING AVG(StudentResult)>60
ORDER BY AVG(StudentResult) DESC
--查询北京地区的每学期学生人数
SELECT COUNT(StudentNo)AS 人数,GradeId
FROM dbo.Student
WHERE Address like '北京%'
GROUP BY GradeId
--查询每学期学生的平均年龄
SELECT COUNT(StudentNo)AS 人数 ,GradeId AS 年级,avg(DATEDIFF(dd,BornDate,GETDATE())/365)AS 平均年龄
FROM dbo.Student
GROUP BY GradeId
--考试日期为2013-3-22日的课程的及格平均分
SELECT AVG(StudentResult) AS 平均分
FROM dbo.Result
WHERE ExamDate='2013-3-22'
HAVING AVG(StudentResult)>60
--至少一次考试不及格的学生学号,不及格次数
SELECT StudentNo , COUNT(StudentResult)AS 次数
FROM dbo.Result
WHERE StudentResult<60
GROUP BY StudentNo
HAVING COUNT(StudentResult)>=1
SELECT COUNT(StudentNo)AS 人数,SubjectId AS 年级 ,min(StudentResult)AS 最低分
FROM dbo.Result
GROUP BY SubjectId
SELECT SubjectId AS 科目, COUNT(StudentNo)AS 人数, MAX(StudentResult)AS 最高分,min(StudentResult) AS 最低分,avg(StudentResult)AS 平均分
FROM dbo.Result
WHERE StudentResult>60
GROUP BY SubjectId
HAVING min(StudentResult)>15
ORDER BY min(StudentResult) DESC
--上机练习三
--指导--两表内连接查询信息
--学生姓名,所属年级名称及联系电话
SELECT S.StudentNo,S.StudentName,S.GradeId,S.Phone
FROM dbo.Student AS S , dbo.Result AS R,dbo.Subject AS G
WHERE S.StudentNo=R.StudentNo AND R.SubjectId=G.GradeId
--年级编号为1的年级名称,科目名称及学时
SELECT J.GradeId AS 年级, j.SubjectName AS 科目,j.ClassHour AS 学时
FROM dbo.Student AS s,dbo.Subject AS j
WHERE s.GradeId=j.GradeId AND j.GradeId='1'
--学号为 S1101007 的学生参加的考试科目名称,分数,考试日期
SELECT s.StudentNo,j.SubjectName,r.StudentResult,r.ExamDate
FROM dbo.Subject AS j,dbo.Result AS r ,dbo.Student AS s
WHERE s.StudentNo=r.StudentNo AND s.GradeId=j.GradeId AND s.StudentNo='S1101007'
--学生学号,科目名称,分数,考试日期
SELECT s.StudentNo,j.SubjectName,r.StudentResult,r.ExamDate
FROM dbo.Student AS s,dbo.Subject AS j,dbo.Result AS r
WHERE s.StudentNo=r.StudentNo AND j.SubjectId=r.SubjectId
--查询学生学号,姓名,考试科目名称及成绩
SELECT s.StudentNo,s.StudentName,b.SubjectName,r.StudentResult
FROM dbo.Student AS s,dbo.Result AS r,dbo.Subject AS b
WHERE s.StudentNo=r.StudentNo AND b.SubjectId=r.SubjectId
--查询'设计MySchool数据库'考试的学生姓名,成绩,考试日期
SELECT s.StudentNo,s.StudentName,b.SubjectName,r.StudentResult,r.ExamDate
FROM dbo.Student AS s,dbo.Result AS r,dbo.Subject AS b
WHERE s.StudentNo=r.StudentNo AND b.SubjectId=r.SubjectId AND b.SubjectName='设计MySchool数据库'