南昌**大学201*-201*学年第二学期期末考试课程名称:数据库原理及应用
学号姓名年龄所在系
1 张三18 数学系
2 李四19 外语系
3 王五20 体育系
4 马六21 物理系
(学生)
课程号课程名先行课
C1 物理数学
C2 数据库计算机
C3 矩阵论高数
C4 德语英语
(课程)
学号课程号成绩
1 C
2 90
2 C1 96
3 C3 90
4 C1 85
(选课)
一、程序填空题(按照程序给定功能,补全程序。每题5分、共20分)
(1)从选课表中选出选修了C1的学号和成绩,并按成绩的升序,学号的降序排序use KSSJK
go
select*
from选课
where课程号='C1'
ORDER BY 成绩DESC,学号ASC
(2)求至少有两名学生选修的课程号和平均分
use KSSJK
go
select A VG(成绩)as平均成绩from选课
where课程号in
(select 课程号from 选课)
group by 课程号having COUNT(*)>1
(3)查询每位学生在选课表中课程的先行课。
use KSSJK
go
select先行课
from选课,学生,课程
where学生.学号=选课.学号and 课程.课程号=选课.课程号
(4)查询至少选修2门课的学生的所在系。
use KSSJK
GO
SELECT distinct选课.学号,所在系
from选课,学生
where选课.学号=学生.学号
and选课.学号in
(select学号
from选课
group by选课.学号
having count(选课.学号)>=2)
二、程序设计题。(共80分)
1、求C1课程的成绩高于马六的学生的学号和成绩。(10')
USE kssjk
GO
select a.学号,b.成绩
from学生a,选课b
where a.学号=b.学号
and b.成绩>(select成绩
from选课,学生
where选课.学号=学生.学号
and学生.姓名='马六'
and选课.课程号='C1'
and b.课程号='C1')
2、求所有课程里分数最高的学号、姓名、所在系、及课程名。(15')
USE kssjk
GO
select学生.学号,姓名,所在系,课程名,成绩
from学生,课程,选课
where学生.学号=选课.学号and选课.课程号=课程.课程
号
and选课.成绩>=all(select成绩from选课)
3、写程序求其他系中比数学系某一年龄小的学生。(即年龄小于计算机系年龄最大的学生)(15')
USE kssjk
GO
select学号,姓名,所在系
from学生
where年龄 (select年龄from学生 where所在系='数学系') and学生.所在系not in('数学系') 4、选修了物理课程但没有选修矩阵论课的学生学号和姓名。(20') USE kssjk GO select学号,姓名 from学生 where学号in (select学号 from选课,课程 where选课.课程号=课程.课程号 and课程名='物理'except select学号 from选课,课程 where选课.课程号=课程.课程号 and课程名='矩阵论') 5、选修了学号为1学生所选修所选修全部课程的学生学号和姓名。(20') USE kssjk GO select学号,姓名 from学生 where学号in (select学号 from选课as xk1 where not exists (select* from选课as xk2 where xk2.学号='1'and not exists (select* from选课as xk3 where xk3.学号=xk1.学号and xk3.课程号=xk2.课程号) ))