一、实验目的
1. 掌握库函数及汇总查询的使用方法。
2. 掌握分组查询的使用方法。
3. 掌握查询的排序方法。
4. 掌握前几项的查询方法。
二、实验硬、软件环境
开发环境: Windows XP 操作系统及以上版本
数据库管理系统:SQL Server 2012
运行环境:Windows XP 操作系统及以上版本
三、实验内容及步骤
在学生成绩管理数据库EDUC的三个关系模式下,进行以下的数据查询,关系模式如下:
学生表Student(学号sno,姓名sname,性别sex,年龄age,专业班级special)
课程表Course(课程号cno,课程名cname,学时period,任课教师teacher)
成绩表Sc(学号sno,课程号cno,成绩grade)
1.查询所有学生的学号和姓名。
代码及运行结果如下:
SELECT sno,sname
FROM Student
2.查询姓王的学生的学号、姓名和专业班级。
代码及运行结果如下:
SELECT sno,sname,special
FROM Student
WHERE sname LIKE '王%'
3.查询没有成绩的学号和课程号。
代码及运行结果如下:
SELECT sno,cno
FROM SC
WHERE grade IS NULL
4.查询年龄在18-22之间的学生姓名和专业班级。
代码及运行结果如下:
SELECT sname,special
FROM Student
WHERE age BETWEEN 18 AND 22
5.查询学号为0538的学生的总成绩。
代码及运行结果如下:
SELECT sum (grade) AS Totalgrade
FROM Sc
WHERE sno= '0538'
6.查询学生表中前10%条记录的信息。
代码及运行结果如下:
SELECT TOP 10 PERCENT*
FROM Student
7.查询选修了K002号课程的学生学号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同则按学号的升序排列。
代码及运行结果如下:
SELECT sno,grade
FROM Sc
WHERE EXISTS ( SELECT sno,grade,cno
FROM Sc
WHERE cno = 'K002')
ORDER BY grade,sno ASC
8.查询选修三门以上(含三门)课程的学生的学号和成绩平均分。
代码及运行结果如下:
SELECT sno,COUNT(*) AS SC_Num
FROM SC
GROUP BY sno
HAVING (COUNT(*)>=3)
9. 查询出各课程号及相应的选课人数,并按选课人数的升序进行排序。
代码及运行结果如下:
SELECT cno,COUNT(成绩表Sc.sno) as 选课人数
FROM 成绩表Sc
GROUP BY cno
ORDER BY 选课人数 ASC
四、实验结果及分析
通过此次实验我了解到库函数及汇总查询和分组查询的使用方法,在此过程中要严格遵循相应的语法格式,否则易会出错;在创建数据表之前,需要为表中的每一个属性设置一种数据类型,其对应的数据类型需根据其数据范围和内容选取;库函数COUNT( *)用来统计元组的个数,不消除重复,不允许使用 DISTINCT关键字;GROUP BY子句可以将查询结果按属性列或属性列组合在行的方向上进行分组,毎组在或属性列组合上具有相同的值。