数据库习题作业.docx

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

数据库习题作业.docx

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

数据库习题作业.docx

数据库习题作业

数据库习题作业重点(第2-3-4章)

设有关系R和S:

RABCSABC

367345

257723

723

443

计算R∪S,R-S,R∩S,R×S,π3,2(S),σB<’5’(R),R2<2S,RS。

解:

R∪SABCR-SABCR∩SABC

367367723

257257

723443

443

345

R×Sπ3,2(S)CB

36734554

36772332

257345

257723

723345

723723

443345

443723

σB<’5’(R)ABCR⋈S

723723345

443

R⋈SABC

723

设有关系R和S:

RABSBC

abbc

cbea

debd

B

计算R⋈S,R⋈S,σA=C(R×S),S⋉R。

假设关系U和V分别有m个元组和n个元组,给出下列表达式中可能的最小和最大的元组数量:

⑴U∩V⑵U∪V

⑶U⋈V⑷σF(U)×V(F为某个条件)

⑸πL(U)-V(其中L为某属性集)

解:

操作

最小元组数

最大元组数

⑴U∩V

0

min(m,n)

⑵U∪V

max(m,n)

m+n

⑶U⋈V

0

m×n

⑷σF(U)×V

0

m×n

⑸πL(U)-V

0

m

设有三个关系:

T(T#,TNMAE,TITLE)

C(C#,CNAME,T#)

S(S#,SNAME,AGE,SEX)

SC(S#,C#,SCORE)

试用关系代数表达式表示下列查询语句:

①检索年龄小于17岁的女学生的学号和姓名。

②检索男学生所学课程的课程号和课程名。

③检索男学生所学课程的任课教师的工号和姓名。

④检索至少选修两门课的学生学号。

⑤检索至少有学号为S2和S4学生选修的课程的课程号。

⑥检索WANG同学不学的课程的课程号。

⑦检索全部学生都选修的课程的课程号与课程名。

⑧检索选修课程包含LIU老师所授全部课程的学生学号。

解:

⑴πS#,SNAME(σAGE<’17’∧SEX=’F’(S))

⑵Πc#,CNAME(σSEX='M'(S⋈SC⋈C))

⑶ΠT#,TNAME(σSEX='M'(S⋈SC⋈C⋈T))

⑷π1(σ1=4∧2≠5(SC×SC))

⑸π2(σ1=’S2’∧4=’S4’∧2=5(SC×SC))

⑹πC#(C)-πC#(σSNAME='WANG'(S⋈SC))

⑺πC#,CNAME(C⋈(πS#,C#(SC)÷πS#(S)))

⑻πS#,C#(SC)÷πC#(σTNAME='LIU'(C⋈T))

在教学数据库的关系S、SC、C、T中,用户有一查询语句:

检索女同学选修课程的课程名和任课教师名。

①试写出该查询的关系代数表达式。

②画出查询表达式的语法树。

③使用启发式优化算法,对语法树进行优化,并画出优化后的语法树。

解:

【】设教学数据库中有4个关系:

教师关系T(T#,TNAME,TITLE)

课程关系C(C#,CNAME,T#)

学生关系S(S#,SNAME,AGE,SEX)

选课关系SC(S#,C#,SCORE)

试用SQL查询语句表示下列查询。

解:

①检索年龄小于17岁的女学生的学号和姓名。

SELECTS#.SNAME

FROMS

WHEREAGE<17ANDSEX=’F’

②检索男学生所学课程的课程号和课程名。

SELECTC.C#,CNAME(连接查询方式)

FROMS,SC,C

WHERES.S#=#AND#=#ANDSEX=’M’;

③检索男学生所学课程的任课老师的工号和姓名。

SELECT#,TNAME

FROMS,SC,C,T

WHERE#=#AND#=#AND#=#ANDSEX=’M’;

④检索至少选修两门课程的学生学号。

SELECTDISTINCT#

FROMSCASX,SCASY

WHERE#=#AND#!

=#;

⑤检索至少有学号为S2和S4的学生选修的课程的课程号。

SELECTDISTINCT#

FROMSCASX,SCASY

WHERE#=’S2’AND#=’S4’AND#=#;

⑥检索WANG同学不学的课程的课程号。

SELECTC#

FROMC

WHERENOTEXISTS

(SELECT*

FROMS,SC

WHERE#=#AND#=#ANDSNAME=’WANG’);

⑦检索全部学生都选修的课程的课程号与课程名。

SELECTC#,CNAME

FROMC

WHERENOTEXISTS

(SELECT*

FROMS

WHERENOTEXISTS

(SELECT*

FROMSC

WHERES#=#ANDC#=#));

⑧检索选修课程包含LIU老师所授全部课程的学生学号。

法一:

SELECTDISTINCTS#

FROMSCASX

WHERENOTEXISTS

(SELECT*

FROMC,T

WHERE#=#ANDTNAME=’LIU’

ANDNOTEXISTS

(SELECT{

FROMSCASY

WHERE#=#AND#=#));

法二:

SELECTDISTINCTS#

FROMSCX

WHERENOTEXISTS

((SELECTC#FROMC,T

WHERE#=#ANDTNAME='LIU’)

EXCEPT

(SELECTC#FROMSCYWHERE#=#));

【3.7】试用SQL查询语句表达下列对第3.2题中4个基本表T、C、S、SC的查询。

①统计有学生选修的课程门数。

SELECTCOUNT(DISTINCTC#)FROMSC;

②求选修C4课程的女学生的平均年龄。

SELECTAVG(AGE)

FROMS,SC

WHERES.S#=SC.S#ANDC#=’C4’ANDSEX=’F’:

③求LIU老师所授的每门课程的平均成绩。

SELECTC.C#.AVG(SCORE)

FROMSC,C,T

WHERESC.C#=C.C#ANDC.T#=T.T#ANDTNAME=’LIU’

GROUPBYC.C#;

④统计选修每门课程的学生人数(超过l0人的课程才统计)。

要求显示课程号和人数,查询结果按人数降序排列,若人数相同,则按课程号升序排列。

SELECTC#.COUNT(S#)

FROMSC

GROUPBYC#

HAVINGCOUNT(*)>10

ORDERBY2DESC,1;

⑤检索学号比WANG同学大,而年龄比他小的学生姓名。

SELECTSNAME

FROMS

WHERES#>ALL(SELECTS#FROMS

WHERESNAME=’WANG’)

ANDAGE

FROMS

WHERESNAME=’WANG);

⑥在表SC中检索成绩为空值的学生的学号和课程号。

SELECTS#,C#

FROMSC

WHERESCOREISNULL;

⑦检索姓名以L开头的所有学生的姓名和年龄。

SELECTSNAME,AGE

FROMS

WHERESNAMELIKE’L%’;

⑧求年龄大于女同学平均年龄的男学生的姓名和年龄。

SELECTSNAME,AGE

FROMS

WHERESEX=’M’

ANDAGE>(SELECTAVG(AGE)

FROMS

WHERESEX=’F’);

⑨求年龄大于所有女同学年龄的男学生的姓名和年龄。

SELECTSNAME,AGE

FROMS

WHERESEX=‘M’

ANDAGE>ALL(SELECTAGE

FROMS

WHERESEX=’F’);

【3.12】

解:

①INSERTINTOC

VALUES(‘C8’,’VC++’,’T6’);

法一:

INSERTINTOFACULTY(TNAME)

SELECTDISTINCTTNAME

FROM(SELECTTNAME,C.C#,AVG(SCORE)

FROMT,C,SC

WHERET.T#=C.T#ANDC.C#=SC.C#

GROUPBYTNAME,C.C#)

ASRESULT(TNAME,C#,AVG—SCORE)ASX

WHERE80<=ALL(SELECTAVG—SCORE

FROMRESULTASY

WHEREY.TNAME=X.TNAME);

法二

INSERTINTOFACULTY(TNAME)

SELECTDISTINCTTNAME

FROMT,C,SC

WHEREC.C#=SC.C#ANDT.T#=C.T#

ANDT#NOTIN(SELECTT#FROMC

WHEREC#IN

(SELECTC#FROMSC

GROUPBYC#HAVINGAVG(SCORE)<=80)

③DELETEFROMSCWHERESCOREISNULL;

④DELETEFROMSC

WHERES#IN(SELECTS#FROMSWHERESEX=’F’)

ANDC#IN(SELECTC#FROMC,TWHERE#=#ANDTNAME=’LIU’);

⑤UPDATESC

SETSCORE=60

WHERESCORE<60

ANDC#IN(SELECTC#FROMCWHERECNAME=’MATHS’);

⑥UPDATESC

SETSCORE=SCORE*

WHERES#IN(SELECTS#FROMSWHERESEX='F’)

ANDSCORE<(SELECTAVG(SCORE)FROMSC);

⑦用两个UPDATE语句实现:

UPDATESC

SETSCORE=SCORE*

WHEREC#=’C4’ANDSCORE>70;

UPDATESC

SETSCORE=SCORE*

WHEREC#=’C4’ANDSCORE<=70;

这两个UPDATE语句的顺序不能颠倒。

用一个UPDATE语句实现:

UPDATESC

SETSCORE=SCORE*CASE

WHENSCORE>70THEN

ELSE

END

WHEREC#=’C4’;

⑧UPDATESC

SETSCORE=SCORE*

WHERESCORE<(SELECTAVG(SCORE)

FROMSC);

【3.13】设数据库中有3个关系:

职工表EMP(E#,ENAME,AGE,SEX,ECITY),其属性分别表示职工工号、姓名、年龄、性别和籍贯。

工作表WORKS(E#,C#,SALARY),其属性分别表示职工工号、工作的公司编号和工资。

公司表COMP(C#,CNAME,CITY),其属性分别表示公司编号、公司名称和公司所在城市。

试用SQL语句写出下列操作:

①用CREATETABLE语句创建上述3个表,需指出主键和外键。

②检索超过50岁的男职工的工号和姓名。

③假设每个职工只能在一个公司工作,检索工资超过1000元的男性职工工号和姓名。

④假设每个职工可在多个公司工作,检索至少在编号为C4和C8的公司兼职的职工工号

和姓名。

⑤检索在联华公司工作、工资超过1000元的男性职工的工号和姓名。

⑥假设每个职工可在多个公司工作,检索每个职工的兼职公司数目和工资总数,显示

(E#,NUM,SUM_SALARY),分别表示工号、公司数目和工资总数。

⑦工号为E6的职工在多个公司工作,试检索至少在E6职工兼职的所有公司工作的职工

工号。

⑧检索联华公司中低于本公司平均工资的职工工号和姓名。

⑨在每一公司中为50岁以上的职工加薪100元(若职工为多个公司工作,可重复加)。

⑩在EMP表和WORKS表中删除年龄大于60岁的职工有关元组。

解:

①CREATETABLEEMP

(E#CHAR(4)NOTNULL,

ENAMECHAR(8)NOTNULL,

AGESMALLINT,

SEXCHAR

(1),

ECITYCHAR(20),

PRIMARYKEY(E#));

CREATETABLECOMP

(C#CHAR(4)NOTNULL,

CNAMECHAR(20)NOTNULL,

CITYCHAR(20),

PRIMARYKEY(C#));

CREATETABLEWORKS

(E#CHAR(4)NOTNULL,

C#CHAR(4)NOTNULL,

SALARYSMALLINT,

PRIMARYKEY(E#,C#),

FOREIGNKEY(E#)REFERENCESEMP(E#),

FOREIGNKEY(C#)REFERENCESCOMP(C#));

②(SELECTE#,ENAME

FROMEMP

WHEREAGE>50ANDSEX=’M’;

③SELECTEMP.E#,ENAME

FROMEMP,WORKS

WHERE#=WORKS.E#ANDSALARY>1000ANDSEX=’M’;

④SELECTA.E#,A.ENAME

FROMEMPA,WORKSB,WORKSC

WHEREA.E#=B.E#ANDB.E#=C.E#

ANDB.C#=’C4’ANDC.C#=’C8’;

⑤SELECTA.E#,A.ENAME

FROMEMPA,WORKSB,COMPC

WHEREA.E#=B.E#ANDB.C#=C.#

ANDCNAME=’联华公司’ANDSALARY>1000ANDSEX='M’;

⑥SELECTE#,COUNT(C#)ASNUM,SUM(SALARY)ASSUM_SALARY

FROMWORKS

GROUPBYE#;

⑦SELECT#

FROMWORKSX

WHERENOTEXISTS

(SELECT*

FROMWORKSY

WHEREE#=’E6’

ANDNOTEXISTS

(SELECT*

FROMWORKSZ

WHEREZ.E#=X.E#ANDZ.C#=Y.C#));

⑧SELECTA.E#,A.ENAME

FROMEMPA,WORKSB,COMPC

WHEREA.E#=B.E#ANDB.C#=C.C#ANDCNAME=’联华公司’

ANDSALARY<(SELECTAVG(SALARY)

FROMWORKS.COMPC

WHEREWORKS.C#=COMP.C#ANDCNAME=’联华公司’);

⑨UPDATEWORKS

SETSALARY=SALARY+100

WHEREE#IN(SELECTE#FROMEMPWHEREAGE>50);

⑩DELETEFROMWORKS

WHEREE#IN(SELECTE#FROMEMPWHEREAGE>60);

DELETEFROMEMP

WHEREAGE>60;

设关系模式R(ABCD),F是R上成立的FD集,F={A→B,C→B},则相对于F,试写出关系模式R的关键码。

并说明理由。

解:

R的关键码为ACD。

因为从已知的F,只能推出ACD→ABCD。

设关系模式R(ABCDE)上FD集为F,并且F={AB→C,CD→E,DE→B},试判断AB是R的候选键吗ABD呢请做出解释。

解:

①从已知的F,可推出AB→ABC,但不能推出AB→ABCDE,因此不是。

②从已知的F,可推出ABD→ABCD,ABD→ABCDE,因此是的。

设关系模式R(ABCD),F是R上成立的FD集,F={A→B,B→C},

1试写出属性集BD的闭包(BD)+。

2试写出所有左部是B的函数依赖(即形为“B→”)。

解:

①从已知的F,可推出BD→BCD,所以(BD)+=BCD。

②由于B+=BC,因此左部是B的FD有四个:

B→φ,B→B,B→C,B→BC。

设关系模式R(ABCDE)上FD集为F,并且F={A→BC,CD→E,B→D,E→A}。

①试求R的候选键。

②试求B+的值。

解:

①R的候选键有四个:

A、E、CD和BC。

②B+=BD。

设关系模式R(ABCD),F是R上成立的FD集,F={AB→CD,A→D}。

1试说明R不是2NF模式的理由。

2试把R分解成2NF模式集。

答:

①从已知FD集F,可知R的候选键是AB。

另外,AB→D是一个局部依赖,因此R不是2NF模式。

②此时R应分解成ρ={AD,ABC},ρ是2NF模式集。

设关系模式R(ABC),F是R上成立的FD集,F={C→B,B→A}。

1试说明R不是3NF模式的理由。

2试把R分解成3NF模式集。

答:

①从已知FD集F,可知R的候选键是C。

从C→B和B→A,可知C→A是一个传递依赖,因此R不是3NF模式。

②此时R应分解成ρ={CB,BA},ρ是3NF模式集。

第1章:

作业:

P37

,,,,,

第5章

作业:

,,,,,,

第7章

作业:

,,,,,

复习范围

、、、

、、、

、、、

、、

、、、

、、、、

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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