三、SQL题(本大题共10小题,每小题2分,总计20分)
3、有一个“学生-课程”数据库(stu_c),数据库中包括三个表:
(1) “学生”表Student由学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、所在系(Sdept)五个属性组成,可记为: Student(Sno,Sname,Ssex,Sage,Sdept) Sno 为关键字, 类型char(8)。
(2) “课程”表Course由课程号(Cno)、课程名(Cname)、先修课号(Cpno)、学分(Ccredit)四个属性组成,可记为: Course(Cno,Cname,Cpno,Ccredit) Cno为关键字,类型char(8)。
(3) “学生选课”表SC由学号(Sno)、课程号(Cno)、成绩(Grade)三个属性组成,可记为: SC(Sno,Cno,Grade) (Sno, Cno) 为关键字。
用SQL语句完成下列操作:(每小题2分)
(1)用SQL语句实现SC表的创建,要求定义相应的主键和外键约束
(2)在以上三个表中查询Ccredit为5并且Grade大于60的学生的学号、姓名和性别
(3)统计每个同学所修课程的全部学分(不及格课程不统计)。
(4)修改“李立”同学的数据库成绩为75分。
(5)删除“数据库”课程的选课信息(条件是其先修课不及格)
(6)“李小波”所选修的全部课程名称;
(7)所有成绩都在80分以上的学生姓名及所在系;
(8)英语成绩比
数学成绩好的学生;
(9)创建视图,显示每个学生的学号,姓名,选课门数,补考门数
(10)查找选课包括“李丽”所有选课的学生
四、PL/SQL程序设计题(本大题共3小题,每3小题10分,总计30分)
(1)为第三大题的学生表定义触发器,当插入学生的时候自动生成学生的学号,其学号的编码格式是前四位是入学的年份,后五位是由序列值生成(不足五位的前面补0),假设已定义序列为StunoSquence,当修改学生时,不能修改学号。
(2)在包头中定义动态游标类型,再定义一个存储过程,实现学生表的分页显示,输入参数为页的大小,第几页,输出参数为包头中定义动态游标类型。
(3)编写PL/SQL块,输出所有同学的成绩清单(包括学号,姓名,课程名称,成绩)
这么多题这点分。先发发牢骚。
1、创建SC表必须先确定创建好STUDENT表,因为STUDENT表中的SNO字段为SC表中的SNO的foreign key(我是这么设计的,因为如果学生表中都没有这个学生,怎么会有学生选课中的数据)。
create table sc (cno varchar(8) primary key,sno varchar(8),constraint SC_SNO_FK foreign key(sno) references student(sno),grade number(8));
2、select a.sno,a.sname,a.ssex from student a,course b,sc c where a.sno=c.sno and b.cno=c.cno and b.ccredit=5 and c.grade>60;
3、有点模糊不清楚,学分是橡雀指course表中的那个学分,还是包括sc表中的grade。
4、如果成绩指的是SC表的数据梁灶早。
update sc set grade='75' where sno=(select sno from student where sname='李立') and cno=(select cno from course where cname='数据库');
5、先修课和课程号 什么概念。说实话有点乱。
6、select b.cname from student a,course b,sc c where a.sno=c.sno and b.cno=c.cno and a.sname='李小波';
7、辩差
select sname,sdept from student t1,
(select a.same s1,min(c.grade) s2
from student a,course b,sc c
where a.sno=c.sno
and b.cno=c.cno
group by a.sname
having min(c.grade)>80) t2
where t2.s1=t1.sname ;
8、select a.aname,c1.grade 英语分数,c2.grade 数据分数 from student a,course b1,course b2, sc c1 ,sc c2 where a.sno=c1.sno and a.sno=c2.sno and c1.grade>c2.grade and b1.cname='英语' and b1.cno=c1.cno and b2.cno=c2.cno and c2.name='数学';
9、create view test as select a.sno,a.name,count(c.cno) 选课门数 from students a,course b,sc c where a.sno=c.sno and b.cno=c.cno group by a.sno,a.name; 少些一个补考门数。实在不会了。请教高人。
10、这是查找学生李丽,都选了那些课吗?
select b.cname from student a,course b,sc c from where a.sno=c.sno and b.cno=c.cno and a.sname like '%李丽%' ;
就这些吧。。第四题自己想去吧。
好多字,看完也要10分钟了,做完预计20分钟。