数据库习题Word文档下载推荐.docx
《数据库习题Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据库习题Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。
典型习题
2、分析题
1.学生与教师教学模型
(1)有若干班级,每个班级包括:
班级号、班级名、专业、人数、教室
(2)每个班级有若干学生,学生只能属于一个班,学生包括:
学号、姓名、性别、年龄
(3)有若干教师,教师包括:
编号、姓名、性别、年龄、职称
(4)开设若干课程,课程包括:
课程号、课程名、课时、学分
(5)一门课程可由多名教师任教,一名教师可任多门课程。
(6)一门课程有多名学生选修,每名学生可选多门课,但选同一门课时,只能选其中一名教师。
解题要求:
(1)画出每个实体及其属性关系、实体间实体联系的(E-R)图。
(2)根据试题中的处理要求:
完成数据库逻辑模型,包括各个表的名称和属性。
(1)
(2)
班级(班级号,班级名,专业,人数,教室),主键:
班级号
学生(学号,姓名,性别,年龄,班级号),主键:
学号
教师(编号,姓名,性别,年龄,职称),主键:
编号
课程(课程号,课程名,课时,学分),主键:
课程号
选课(课程号,学号,成绩),主键:
课程号,学号
任课(课程号,编号,时间),主键:
课程号,编号
五.对于学生选课关系,其关系模式为:
student(sno,sname,sex,age);
course(cno,cname,teacher);
sc(sno,cno,grade)。
用关系代数完成以下查询:
1查询“李通”老师所教授课程的课程号和课程名;
2查询学号为“95002”学生选修的课程号、课程名、任课教师、和成绩;
3查询选了“王海”老师所教授课程的学生姓名;
4查询女生选修课程的课程号、课程名和任课教师;
5查询选了全了课程的学号和姓名。
请用关系代数完成如下查询:
(3分共15分)
答:
1∏cno,cnameσteacher=‘李通’(course)
2∏cno,cname,teacher,gradeσsno=’95002’(student∞sc)
3∏snameσteacher=’王海’(student∞sc∞course)
4∏cno,cname,teacher(σsex=‘女‘(student∞sc∞course)
5.∏sno,sname((∏sno,cnosc÷
∏cnocourse)∞student))
六.
请设计一个基于数据库管理的应用软件系统—学生学生信息处理系统模型,要求完成下列功能(本题共15分,每小题3分)
1.画出学生,课程,选课的ER图
2.设计该系统中可能要用到的数据表(写出各个表及其包含的各个字段)
3.画出该系统的功能模块图
4.由此设计模型来简述一下数据库设计的基本步骤。
5.请你来为这一软件选择一种数据库,说出数据库的名字,并简单说明一下选择的理由。
结果A=4,B=2
1
七.设T1,T2是如下两个事务:
T1:
A:
=A+3,B=B*3
T2:
=A*3,B=B+3
问1.若这个事务允许并发执行,则有多少种可能的正确结果?
2.请给出一个可串行化的调度,并给出执行结果?
3.若这2个事务都遵守两段锁协议,请给出一个产生死锁的调度。
答1.有两种可能的正确结果:
T1T2
T2T1
2.可串行化的调度
XlockAXlockA
XlockBwait
读A=0…
读B=0XlockA
A=A+3=3XlockB
B=B*3=3读A=3
Commit读B=9
UnlockAA=A*3=9
UnlockBB=B+3=12
Commit
UnlockA
UnlockB
结果:
A=9,B=12
3.产生死锁的例子:
XlockAXlockB
Waitwait
XlockBXlockA
Waitwait
八.SQL命令题
所有上机题目,请点击题目编号可查看答案
1001
查询全体信息系男同学信息情况
select*fromstudentwheresdept='
信息系'
andsex='
男'
1002
查询选修了3号课的学生的学号和成绩
selectsno,gradefromscwherecno='
3'
1003
查询1989年以前出生的学生学号和姓名和出生日期(提示请用year(csrq)函数来取出生年号)
selectsno,sname,csrqfromstudentwhereyear(csrq)<
1989
1004
查询信息系所有女生的学号,姓名,及所在系
selectsno,sname,sdeptfromstudentwheresex='
女'
andsdept='
1005
查询课程名是数据库的课程号和学分
selectcno,ccreditfromcoursewherecname='
数据库'
1006
查询先行课号为5的课程号和课程名
selectcno,cnamefromcoursewherecpno='
5'
1007
查询英语系90后的学生情况(注90年后出生的含90年)
英语系'
andyear(csrq)>
=1990
1008
查询计算机系或信息系中年龄超过21岁的同学情况.(设当前年为2010年,提示用当前年减去出生年再与21岁比较)
计算机系'
and2010-year(csrq)>
21orsdept='
21
1009
请将3号课及4号课中成绩大于80分的学生的学号,课程号及成绩显示出来
select*fromscwherecno='
andgrade>
80orcno='
4'
80
1010
查询所有先行课程号为0且学分为2的课程名,先行课程号,及学分
selectcname,cno,cpno,ccreditfromcoursewhereccredit=2andcpno='
0'
2001
查询年龄在20-23岁之间(含20与23岁)的学生姓名,系别,年龄(用age表示)(请不要用between语句提交)当前年2010
selectsname,sdept,2010-year(csrq)asagefromstudentwhere2010-year(csrq)<
=23and2010-year(csrq)>
=20
2002
查询选修过课程且成绩大于80分的所有学生的学号(不许重复)
selectdistinctsnofromscwheregrade>
2003
请将选修了1号课或3号课课程的同学按课程号升序,成绩降序排序
1'
orcno='
orderbycno,gradedesc
2004
请将选了1号课程且成绩在60分以上的同学按成绩降序排序
60orderbygradedesc
2005
查询选修了1号课的,成绩大于60分,学号后2位数字含8的学号和成绩
60and(snolike'
_______8'
orsnolike'
______8_'
)
2006
查询所有李姓的09级同学情况
select*fromstudentwheresnamelike'
李%'
andsnolike'
09%'
2007
查询所有两字姓名的张姓85年后出生同学的姓名,性别与系别
selectsname,sex,sdeptfromstudentwhereyear(csrq)>
1985andsnamelike'
张_'
2008
查询名字中第3个字为铃4月4号出生的学生的姓名和学号
selectsname,snofromstudentwheresnamelike'
__铃%'
andmonth(csrq)=4andday(csrq)=4
2009
查询信息系所有不姓刘的同学的学号和姓名
selectsno,snamefromstudentwheresdept='
andsnamenotlike'
刘%'
2010
查询学分为3以上(不含3),且课程名中包含着'
数据'
二字的所有课程名及学分
selectcname,ccreditfromcoursewhereccredit>
3andcnamelike'
%数据%'
3001
查询所有选修过数据库或信息系统课的学生的姓名,课程名及成绩
selectsname,cname,gradefromstudent,course,scwherestudent.sno=sc.snoando=oand(cname='
orcname='
信息系统'
3002
查询选修了1号课且成绩大于80分的的同学的姓名,课程号及成绩
selectsname,cno,gradefromstudent,scwherestudent.sno=sc.snoandcno='
3003
查询选了2号课的张姓,孙姓,女生姓名,课程号及成绩,并将成绩按降序排序
2'
and(snamelike'
张%'
orsnamelike'
孙%'
)orderbygradedesc
3004
查询计算机系选修了数据库课的所有男生的姓名及该课的成绩
selectsname,gradefromstudent,sc,coursewherestudent.sno=sc.snoando=oandsex='
andcname='
3005
查询09级选修了数据库课的最高成绩.最低成绩和平均成绩(注用as来表示最低,最高及平均成绩
selectmax(grade)as最高成绩,min(grade)as最低成绩,avg(grade)as平均成绩fromsc,coursewhereo=oandsnolike'
3006
查询李勇同学选修的成绩在80分以上的课程的学分总和
selectsum(ccredit)as学分总和fromstudent,sc,coursewherestudent.sno=sc.snoando=oandsname='
李勇'
3007
查询09级末位学号在15之前的选修过的课程中至少有一门课为4个学分的同学的姓名,课程名,学分(提示请考虑用右截取函数right(sno,2))
selectsname,cname,ccreditfromstudent,sc,coursewherestudent.sno=sc.snoando=oandstudent.snolike'
andccredit>
=4andright(student.sno,2)<
15
3008
查询计算机系所有选了数据库成绩在80分以上的同学的姓名及成绩
selectsname,gradefromstudent,sc,coursewherestudent.sno=sc.snoando=oandsdept='
3009
查询李勇同学所学课程的学分为2学分以上课程的学分总和及成绩总和(注用as总学分)
selectsum(ccredit)as总学分,sum(grade)as总成绩fromstudent,sc,coursewherestudent.sno=sc.snoando=oandsname='
2
3010
查寻选了1号课,计算机系,女生的人数.
selectcount(*)as女生人数fromstudent,sc,coursewherestudent.sno=sc.snoando=oandsex='
ando='
4001
查询同时选修了1号课和3号课的李姓同学的姓名及系
selectsname,sdeptfromsc,studentwheresc.snoin(selectsnofromscwherecno='
)andcno='
andstudent.sno=sc.snoandsnamelike'
4002
查询同时选修了数据库及数学的同学的学号
selectdistinctsnofromscwheresnoin(selectsnofromscwherecnoin(selectcnofromcoursewherecname='
))andcnoin(selectcnofromcoursewherecname='
数学'
4003
查询选修了全部课程的同学的姓名
selectsnamefromstudent,scwherecno=all(selectcnofromcourse)andstudent.sno=sc.sno
4004
查询与李勇同在一个系,且年龄比他小的同学的姓名(提示用year(csrq)来进行比较)
selectsnamefromstudentwheresdeptin(selectsdeptfromstudentwheresname='
)andyear(csrq)>
(selectyear(csrq)fromstudentwheresname='
4005
查询比计算机系平均年龄都大的其它系学生姓名,系和年龄。
(注意不含计算机系的学生)提示设当前年为2010,平均年龄可用avg(2010-year(csrq))表示
selectsname,sdept,(2010-year(csrq))as年龄fromstudentwhere(2010-year(csrq))>
all(selectavg(2010-year(csrq))fromstudentwheresdept='
)andsdept<
>
'
4006
查询王名同学没有选的课程名(提示:
就是查询那课程表中所有的但是王名没有选过的课程)
selectcnamefromcoursewherecnonotin(SELECTcnoFROMSCwheresnoin(selectsnofromstudentwheresname='
王名'
))
4007
查询选修了1号课并且成绩比全班1号课平均成绩低的同学学号及成绩
selectsno,gradefromscwheresnoin(selectsnofromscwherecno='
)andgrade<
(selectavg(grade)fromscwheresnoin(selectsnofromscwherecno='
4008
查询选修的学分总数超过8个的学生的姓名
selectsnamefromstudentwheresnoin(selectsnofromsc,coursewhereo=ogroupbysnohavingsum(ccredit)>
8)
4009
查询选修了比王名学分数低的其它同学姓名
selectsnamefromstudentwheresnoin(selectsnofromsc,coursewhereo=ogroupbysnohavingsum(ccredit)=(selectsum(ccredit)fromsc,coursewhereo=oandsnoin(selectsnofromstudentwheresname='
))andsname<
4010
查询比平均成绩比李勇的平均成绩高的同学李姓或王姓姓名
selectsnamefromstudentwheresnoin(selectsnofromscgroupbysnohavingavg(grade)>
(selectavg(grade)fromscwheresnoin(selectsnofromstudentwheresname='
)))and(snamelike'
orsnamelike'
王%'
5001
查询所有选修课平均成绩大于85分并且单科成绩大于80分的同学的学号和平均成绩。
selectsno,avg(grade)as'
平均成绩'
fromscgroupbysnohavingavg(grade)>
85andmin(grade)>
5002
查询至少选修过2门课程且平均成绩在80分以上的的信息系学生学号,及平均成绩
80andsnoin(selectsnofromstudentwheresdept='
)andcount(*)>
=2
5003
查询各系90后的女生人数,分别按系,女生人数表示出来。
selectsdept,count(*)as'
90后女生人数'
fromstudentwhereyear(csrq)>
=1990andsex='
groupbysdept
5004
查询各门课程所选的人数,然后按照选课人数降序排序,并用课程号及所选人数表示出来
selectcno,count(*)as'
所选人数'
fromscgroupbycnoorderbycount(*)desc
5005
查询计算机系所选课程中每个同学的平均成绩,最低成绩,最高成绩,并用学号和平均成绩\最低成绩,最高成绩表示出来
min(grade)as'
最低成绩'
max(grade)as'
最高成绩'
fromscwheresnoin(selectsnofromstudentwheresdept='
)groupbysno
5006
查询选修的学分数超过8个学分并且每门课的学分大于等于2的同学姓名学分数和
selectsname,sum(ccredit)fromstudent,sc,coursewheresc.sno=student.snoando=ogroupbysnamehavingsum(ccredit)>
8andmin(ccredit)>
5007
查询个人平均成绩比王名平均成绩高的,同学姓名及平均成绩
selectsname,avg(grade)as'
fromstudent,scwherestudent.sno=sc.snogroupbysnamehavingavg(grade)>
5008
查询信息系仅选过一门课且成绩在80分以上(含80)的的同学学号
=80andsnoin(selectsnofromstudentwheresdept='
)andcount(*)=1
5009
查询数据库,数学,信息系统这三门课的选课人数,并用课程名和选课人数表示出来
selectcname,count(*)as'
选课人数'
fromsc,coursewhereo=oandcnamein('
'
)groupbycname
5010
查询每位同学选修课的平均成绩,最低成绩,最高成绩,并按平均