一、实验名称和性质
分类查询
验证 综合 设计
二、实验目的
1.掌握数据查询的Group by ;
2. 掌握聚集函数的使用方法。
三、实验的软硬件环境要求
硬件环境要求:
PC机(单机)
使用的软件名称、版本号以及模块:
Windows 10下的SQL Server 2019
四、知识准备
前期要求掌握的知识:
数据检索的语句格式:
SELECT [ALL|DISTINCT] <目标列表达式列表>
FROM <表名或视图名列表>
[ WHERE <条件表达式> ]
[ GROUP BY <列名1>,… [WITH ROLLUP | CUBE] [CUBE(…)| ROLLUP(…)]
[GROUPING SETS (…)]
[ HAVING <条件表达式> ] ]
[ ORDER BY <列名2> [ ASC|DESC ] ]
其中,SELECT后的目标列表达式可以是列名、表达式或函数。
GROUP BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用集函数。
HAVING短语:筛选出只有满足指定条件的组
ORDER BY子句:对查询结果表按指定列值的升序或降序排序
注意:T-SQL语句中关键字不区分大小写
五、实验内容(以实验5的数据为基础)
1.对数据表进行分类汇总;
2.在检索中使用聚集函数;
六、验证性实验
- 使用聚集函数
(1)查询选课表中最高分、平均分、最低分
SELECT MAX(DEGREE), AVG(DEGREE),MIN(DEGREE)
FROM SCORE023
(2)查询“3-105”课程的最高分、平均分和最小成绩。
SELECT MAX(DEGREE), AVG(DEGREE),MIN(DEGREE)
FROM SCORE023
WHERE CNO=‘3-105’
- 进行分组统计:
(1)查询各学生的选课数
SELECT SNO,COUNT(*)
FROM SCORE023
GROUP BY SNO
(2)使用HAVING 字句:“选课表”中查询选修了3 门以上课程的学生学号。
SELECT SNO ,COUNT(*)FROM SCORE023
GROUP BY SNO
HAVING COUNT(*)>=3
(3)“选课表”中按学号分组汇总学生的平均分,并按平均分的降序排列。
SELECT SNO 学号, AVG(DEGREE) 平均分 FROM SCORE023
GROUP BY SNO
ORDER BY 平均分 DESC -- -- ORDER BY AVG(DEGREE) DESC
“选课表”中查询平均成绩80以上课程的学生学号和平均成绩。
SELECT SNO ,avg(degree) 平均 FROM SCORE023
GROUP BY SNO
HAVING avg(degree)>=80
“选课表”中95031班中平均成绩80以上课程的学生学号,姓名,平均成绩。
SELECT S.SNO ,SNAME,avg(degree) 平均 FROM SCORE023 SC
JOIN STUDENTXXX S ON S.SNO=SC.SNO WHERE CLASS=’95031’
GROUP BY S.SNO,SNAME
HAVING avg(degree)>=80
(4)分析下面SELECT语句执行结果
SELECT SNO, CNO ,AVG(DEGREE) FROM SCORE023
GROUP BY SNO --???
SELECT SNO,CNO,AVG(DEGREE) FROM SCORE023
GROUP BY SNO,CNO WITH ROLLUP
SELECT SNO,CNO,AVG(DEGREE) FROM SCORE023
GROUP BY ROLLUP(SNO,CNO)
SELECT SNO, CNO,AVG(DEGREE) FROM SCORE023
GROUP BY SNO,CNO WITH CUBE
SELECT SNO,CNO,AVG(DEGREE) FROM SCORE023
GROUP BY CUBE(SNO,CNO)
SELECT SNO,CNO,AVG(DEGREE) FROM SCORE023
GROUP BY GROUPING SETS (SNO,CNO)
SELECT SNO,CNO,AVG(DEGREE) FROM SCORE023
GROUP BY GROUPING SETS (ROLLUP(SNO,CNO))
SELECT SNO,CNO,AVG(DEGREE) FROM SCORE023
GROUP BY GROUPING SETS (ROLLUP(SNO,CNO),CUBE(SNO,CNO))
七、设计性实验
1.实验要求
(1)查询每门课程的平均分,包括课程号和平均分。
(2)查询每门课程的平均分,包括课程号、课程名和平均分。
(3)查询男的平均分,包括学号和平均分。
(4)查询女的平均分,包括学号,姓名和平均分。
(5)查询每门课程的最高、最低分,包括课程号和最高、最低分。
(6)查询每位学生的最高、最低分、平均分,包括学号,姓名和最高、最低分、平均分。
(7)查询所有成绩都及格的学号,姓名
(8)查询每位老师所授课程的最高、最低分,包括教师号,姓名,课程名和最高、最低分。
(9)查询学生信息,包括学号,课程号,成绩以及学生的平均分。(一个语句)
(10)查询学生信息,包括姓名,课程名,成绩以及每位学生的平均分和每门课程的平均分。(一个语句)
(11)查询学生信息,包括学号,姓名,课程号,课程名,成绩以及每位学生的平均分和每门课程的平均分。(一个语句)
(12)查询学生信息,包括学号,姓名,课程号,课程名以及每位学生的平均分和每门课程的平均分。(一个语句)