数据库习题.docx

上传人:b****5 文档编号:6435262 上传时间:2023-01-06 格式:DOCX 页数:18 大小:68.65KB
下载 相关 举报
数据库习题.docx_第1页
第1页 / 共18页
数据库习题.docx_第2页
第2页 / 共18页
数据库习题.docx_第3页
第3页 / 共18页
数据库习题.docx_第4页
第4页 / 共18页
数据库习题.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

数据库习题.docx

《数据库习题.docx》由会员分享,可在线阅读,更多相关《数据库习题.docx(18页珍藏版)》请在冰豆网上搜索。

数据库习题.docx

数据库习题

期末复习与课后练习

一.名词解释:

1.关系

一个关系即一张二维表,如student(sno,sname,sex,age)

2.主码

表中的某个属性组,它可以唯一确定一个元组,如SNO

3.元组

表中的一行即为一个元组

4.属性

表中的一列即为一个属性,如SNO

5.域

属性的取值范围,如人的年龄一般在职~150岁之间

6.元组

关系表中的一行

7.联系

现实世界中事物间的关联(或实体间的关联)

8.实体

客观存在并可互相区别的事物。

9.实体集

同型实体的集合。

10.DBA

数据库管理员

11.X封锁

如果事务T对数据R实现X封锁,那么其他的事务要等T解除X封锁以后,才能对这个数据进行封锁。

12.非码属性

包含在任何一个非候选码中的属性。

13.部分函数依赖

关系模式中,如果X→Y,且X存在真子集X',使X'→Y也成立,这时称X→Y为部分函数依赖。

14.参照完整性

若属性F是基本关系R的外码,它与另一个基本关系S的主码Ks相对应,则对于R中每个元组在F上的值或取空值,或者等于S中某个元组的主码值。

15.一级封锁协议

事务T在修改数据R之前,必须先对其加X锁,事务结束才释放。

 

 

典型习题

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:

=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年)

select*fromstudentwheresdept='英语系'andyear(csrq)>=1990

1008

查询计算机系或信息系中年龄超过21岁的同学情况.(设当前年为2010年,提示用当前年减去出生年再与21岁比较) 

select*fromstudentwheresdept='计算机系'and2010-year(csrq)>21orsdept='信息系'and2010-year(csrq)>21

1009

请将3号课及4号课中成绩大于80分的学生的学号,课程号及成绩显示出来

select*fromscwherecno='3'andgrade>80orcno='4'andgrade>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>80

2003

请将选修了1号课或3号课课程的同学按课程号升序,成绩降序排序 

select*fromscwherecno='1'orcno='3'orderbycno,gradedesc

2004

请将选了1号课程且成绩在60分以上的同学按成绩降序排序 

select*fromscwherecno='1'andgrade>60orderbygradedesc

2005

查询选修了1号课的,成绩大于60分,学号后2位数字含8的学号和成绩 

selectsno,gradefromscwherecno='1'andgrade>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='1'andgrade>80

3003

查询选了2号课的张姓,孙姓,女生姓名,课程号及成绩,并将成绩按降序排序 

selectsname,cno,gradefromstudent,scwherestudent.sno=sc.snoandcno='2'andsex='女'and(snamelike'张%'orsnamelike'孙%')orderbygradedesc

3004

查询计算机系选修了数据库课的所有男生的姓名及该课的成绩 

selectsname,gradefromstudent,sc,coursewherestudent.sno=sc.snoando=oandsex='男'andcname='数据库'andsdept='计算机系'

3005

查询09级选修了数据库课的最高成绩.最低成绩和平均成绩(注用as来表示最低,最高及平均成绩 

selectmax(grade)as最高成绩,min(grade)as最低成绩,avg(grade)as平均成绩fromsc,coursewhereo=oandsnolike'09%'andcname='数据库'

3006

查询李勇同学选修的成绩在80分以上的课程的学分总和 

selectsum(ccredit)as学分总和fromstudent,sc,coursewherestudent.sno=sc.snoando=oandsname='李勇'andgrade>80

3007

查询09级末位学号在15之前的选修过的课程中至少有一门课为4个学分的同学的姓名,课程名,学分(提示请考虑用右截取函数right(sno,2))

selectsname,cname,ccreditfromstudent,sc,coursewherestudent.sno=sc.snoando=oandstudent.snolike'09%'andccredit>=4andright(student.sno,2)<15

3008

查询计算机系所有选了数据库成绩在80分以上的同学的姓名及成绩 

selectsname,gradefromstudent,sc,coursewherestudent.sno=sc.snoando=oandsdept='计算机系'andcname='数据库'andgrade>80

3009

查询李勇同学所学课程的学分为2学分以上课程的学分总和及成绩总和(注用as总学分)

selectsum(ccredit)as总学分,sum(grade)as总成绩fromstudent,sc,coursewherestudent.sno=sc.snoando=oandsname='李勇'andccredit>2

3010

查寻选了1号课,计算机系,女生的人数.

selectcount(*)as女生人数fromstudent,sc,coursewherestudent.sno=sc.snoando=oandsex='女'andsdept='计算机系'ando='1'

4001

查询同时选修了1号课和3号课的李姓同学的姓名及系

selectsname,sdeptfromsc,studentwheresc.snoin(selectsnofromscwherecno='1')andcno='3'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='1')andgrade<(selectavg(grade)fromscwheresnoin(selectsnofromscwherecno='1'))

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)>80

5002

查询至少选修过2门课程且平均成绩在80分以上的的信息系学生学号,及平均成绩 

selectsno,avg(grade)as'平均成绩'fromscgroupbysnohavingavg(grade)>80andsnoin(selectsnofromstudentwheresdept='信息系')andcount(*)>=2

5003

查询各系90后的女生人数,分别按系,女生人数表示出来。

 

selectsdept,count(*)as'90后女生人数'fromstudentwhereyear(csrq)>=1990andsex='女'groupbysdept

5004

查询各门课程所选的人数,然后按照选课人数降序排序,并用课程号及所选人数表示出来 

selectcno,count(*)as'所选人数'fromscgroupbycnoorderbycount(*)desc

5005

查询计算机系所选课程中每个同学的平均成绩,最低成绩,最高成绩,并用学号和平均成绩\最低成绩,最高成绩表示出来 

selectsno,avg(grade)as'平均成绩',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)>=2

5007

查询个人平均成绩比王名平均成绩高的,同学姓名及平均成绩 

selectsname,avg(grade)as'平均成绩'fromstudent,scwherestudent.sno=sc.snogroupbysnamehavingavg(grade)>(selectavg(grade)fromscwheresnoin(selectsnofromstudentwheresname='王名'))

5008

查询信息系仅选过一门课且成绩在80分以上(含80)的的同学学号 

selectsno,avg(grade)as'平均成绩'fromscgroupbysnohavingavg(grade)>=80andsnoin(selectsnofromstudentwheresdept='信息系')andcount(*)=1

5009

查询数据库,数学,信息系统这三门课的选课人数,并用课程名和选课人数表示出来 

selectcname,count(*)as'选课人数'fromsc,coursewhereo=oandcnamein('数据库','数学','信息系统')groupbycname

5010

查询每位同学选修课的平均成绩,最低成绩,最高成绩,并按平均

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1