数据库系统大题.docx
《数据库系统大题.docx》由会员分享,可在线阅读,更多相关《数据库系统大题.docx(13页珍藏版)》请在冰豆网上搜索。
数据库系统大题
2一个教师可讲授多门课,一门课只有一个教师讲授;
3一个学生选修一门课,仅有一个成绩。
要求:
根据上述语义画岀ER图,要求在图中画岀实体的属性并注明联系的类型;
(C#)和课程名(CNAME)
CHER)
解答:
1、设有如下所示的关系S(S#,SNAME,sCs#c#GRade学生试用关系m£数表达式表示
检索“程军”老师所授课程的课程号
⑵检索年龄大于21的男学生学号(S#)和姓名(SNAME)、
⑶检索至少选修“程军”老师所授全部课程的学生姓名f(SNAME)
(4)检索”李强”同学不学课程的课程号
C教师编号
(5)检索至少选修两门课程的学生学号
⑹检索全部学生都选修的课程的课程号(C#)和课程名(CNAME)
(7)检索选修课程包含“程军”老师所授课程之一的学生学号(S#)
(8)检索选修课程号为k1和k5的学生学号(S#)
(9)检索选修全部课程的学生姓名(SNAME)
(10)检索选修课程包含学号为2的学生所修课程的学生学号(S#)
(11)检索选修课程名为“C语言”的学生学号(S#)和姓名(SNAME)
解:
本题各个查询语句对应的关系代数表达式表示如下:
(1).nC#,CNAME(TEACHER=程军'(C))
(2).nS#,SNAME((AGE>21\SEX=男”(C))
(3).nSNAME{&[nS#,C#(sc)-nC#((TEACHER=程军'(C))]}
(4).nC#(C)-nC#(oSNAME=李强'(S)SC)
(5).nS#(d1]=[4]A[2]工⑸(SCXSC))
⑹.
nc#,cname(c(ns#,c#(sc)*ns#(s)))
⑺•
nS#(SCnC#(oTEACHER=程军'(C)))
(8).
nS#,C#(sc)*nC#(dC#=k1'VC#='k5'
(C))
(9).
nsname{s[ns#,c#(sc)*nc#(c)]}
(10).
ns#,c#(sc)*nc#(js#='2'(sc))
(11).
nS#,SNAME{s[nS#(SC£NAME‘C语言’
(C))]}
2、关系R和S如下图所示,试计算R*S。
R(No,NAMESEXAGECLASS)
主关键字是NO
其中NO为学号,NAME为姓名,SEX为性别,AGE为年龄,CLASS为班号
写出实现下列功能的SQL语句。
1插入一个记录(25,“李明”,“男”,21,“95031”);
2插入“95031”班学号为30、姓名为“郑和”的学生记录;
3将学号为10的学生姓名改为“王华”;
4将所有“95101”班号改为“95091”;
5
R
删除学号为20的学生记录;
6删除姓“王”的学生记录;
答案:
1INSERTINTORVALUES(25“李明”,“男”,21,“95031”)
2INSERTINTOR(NQNAMECLASS)VALUES(30,“郑和”,“95031”)
3UPDATERSETNAME=i华”WHERENG10
4UPDATERSETCLASS“95091”WHERECLASS“95101”
5DELETEFROMRWHERENO=20
6DELETEFROMRWHERENAMELf^%”
2、设学生课程数据库中有三个关系:
学生关系S(S#,SNAME,AGE,SEX)
学习关系SC(S#,C#,GRADE)
课程关系C(C#,CNAME)
其中S#、C#、SNAME、AGE、SEX、GRADE、CNAME分别表示学号、课程号、姓名、年龄、性别、成绩和课程名。
用SQL语句表达下列操作
(I)检索选修课程名称为“MATHS”的学生的学号与姓名
(2)检索至少学习了课程号为“C1”和“C2”的学生的学号
(3)检索年龄在18到20之间(含18和20)的女生的学号、姓名和年龄
(4)
(4)将选修课程号为“C1”的同学成绩加5分
(5)找岀每个学生超过他选修课程平均成绩的课程号
(6)查询查询选修“C2'号课程且成绩在90分以上的所有学生。
(7)查询所有姓刘的学生的姓名、学号和性别
(8)检索平均成绩超过80分的学生学号和平均成绩
(9)检索选修了全部课程的学生姓名
(II)检索选修了三门课以上的学生的姓名
(12)创建视图stu」nfo,包括选修“C1”号课程所有学生的学号、姓名、性别、年龄、选修课程号、课程名、成绩
答案:
(1)SELECTSNAME,AGE
FROMS,SC,C
WHERES.S#=SC.S#
ANDC.C#=SC.C#
ANDCNAME='MATHS
(2)SELECTS#
FROMSC
WHERECNO='C1'ANDS#IN(SELECTS#
FROMSC
WHERECNO='C2)
(3)SELECTS#,SNAME,AGE
FROMS
WHEREAGEBETWEEN18AND20
(4)INSERTINTOS(S#,SNAME,AGE,SEX)
VALUES(“”,”王丽”,19,”女”);
(5)UPDATESC
SETGRADE=GRADE+5
WHEREC#二'C1';
(6)SELECTS#,C#
FROMSXWHEREGRADE>=(SELECTAVG(GRADE)FROMCYWHEREY.S#二X.S#);
(7)SELECTS.S#,SNAMEFROMS,SCWHERES.S#=SC.S#ANDSC.C#=C2ANDSC.GRADE>90;
(8)SELECTSNAME,S#,SEXFROMSWHERELIKE'刘%;
(9)SELECTS#,AVG(GRADE)'平均成绩’
FROMSC
GROUPBYS#
HAVINGAVG(GRADE)>80
(10)SELECTSNAME
FROMS
WHERENOTEXISTS
(SELECT*
FROMC
WHERENOTEXISTS
(SELECT*
FROMSC
WHERES#=S.S#ANDC#=C.C#
)
)
(11)SELECTSNAME
FROMS,SC
WHERES.S#二SC.S#
GROUPBYSNAME
HAVINGCOUNT(*)>3
(12)CREATEVIEWSTU_INFOAS
SELECTS.SNO,SNAME,SEXAGEC.CNOCNAMEGRADE
FROMSSCC
WHERES.SNO=SC.SNOANDC.CNO=SC.CNOANDC.CNO=
3、设学生-课程数据库中包括三个表:
学生表:
Student(Sno,Sname,Sex,Sage,Sdept)
课程表:
Course(Cno,Cname,Ccredit)
学生选课表:
SC(Sno,Cno,Grade)
其中Sno、Sname、Sex、Sage、Sdept、Cno、Cname、Ccredit、Grade分别表示学号、姓名、性别、年龄、所在系
名、课程号、课程名、学分和成绩。
试用SQL语言完成下列项操作:
(1)查询选修课程包括“1042”号学生所学的课程的学生学号
(2)创建一个计科系学生信息视图S_CS_VIEW,包括Sno学号、Sname姓名、Sex性别;
(3)通过上面第2题创建的视图修改数据,把王平的名字改为王慧平
(4)创建一选修数据库课程信息的视图,视图名称为datascore_view,包含学号、姓名、成绩。
答案:
⑴SELECTDISTINCTSNO
FROMSCSCX
WHERENOTEXISTS
(SELECT*
FROMSCSCY
WHERESCY.SNO='1042'AND
NOTEXISTS
(SELECT*
FROMSCSCZ
WHERESCZ.SNO=SCX.SNOAND
SCZ.CNO=SCY.CNO));
(2)CREATEVIEWS_CS_VIEW
AS
SELECTSNO,SNAME,SEX
FROMSTUDENT
WHERESDEPT='CS
(3)UPDATES_CS_VIEW
SETSNAME='王慧平’
WHERESNAME='王平’
⑷CREATEVIEWDATASCORE_VIEW
AS
SELECTSNO学号、SNAME姓名、GRADE成绩
FROMSTUDENT,SC,COURSE
WHERESTUDENT.SNO=SC.SNO
ANDCOURSE.CNO=SC.CNO
ANDCNAME='数据库’
1、设有关系模式S-L-C(Sno,Sdept,Sloc,Cno,Grade),其中属性分别表示:
学号、所在系、
学生住处、课程号、成绩。
假定每个系的学生住在同一个地方,每个学生可选修多门课程,每门课程可被多个学生选修,请根据语义写出该关系模式的主码及基本函数依赖,并通过模式分解,使其分解为与之等价的3NF模式集。
答:
主码为(Sno,Cno)。
基本函数依赖:
(Sno,Cno)Grade
P
Sno+Sdept,(Sno,Cno)—Sdept
Snoloc,(Sno,Cno)-PSJoc,SdeptS^oc
分解结果(3NF):
SC(Sno,Cn,Grade)
S-D(Sno,Sdept)
D-L(Sdept,Sloc)
2、已知学生关系模式
S(Sno,SnameSD,SdnameCourse,Grade)
其中:
Sno学号、Sname生名、SD系名、Sdname系主任名、Course课程、Grade成绩。
(1)写出关系模式S的基本函数依赖和主码。
(2)原关系模式S为几范式?
为什么?
分解成高一级范式,并说明为什么?
(3)将关系模式分解成3NF,并说明为什么?
(1)写出关系模式S的基本函数依赖和主码。
答:
关系模式S的基本函数依赖如下:
SnofSnameSD^SdnameSno^SD,(Sno,Course)fGrade
关系模式S的码为:
(Sno,Course)。
(2)原关系模式S为几范式?
为什么?
分解成高一级范式,并说明为什么?
答:
原关系模式S是属于1NF的,码为(Sno.Course),非主属性中的成绩完全依赖于码,而其
它非主属性对码的函数依赖为部分函数依赖,所以不属于2NF。
消除非主属性对码的函数依赖为部分函数依赖,将关系模式分解成2NF如下:
S1(Sno,SnameSD,Sdname)
S2(Sno,Course,Grade)
(3)将关系模式分解成3NF,并说明为什么?
答:
将上述关系模式分解成3NF如下:
关系模式S1中存在SncfSD,SD^Sdname即非主属性Sdname传递依赖于Sno,所以S1不是
3NF。
进一步分如下:
S11(Sno,Sname,SD)S12(SD,Sdname)
分解后的关系模式S1