数据库原理答案Word格式.docx
- 文档编号:20698236
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:34
- 大小:30.98KB
数据库原理答案Word格式.docx
《数据库原理答案Word格式.docx》由会员分享,可在线阅读,更多相关《数据库原理答案Word格式.docx(34页珍藏版)》请在冰豆网上搜索。
C
计算R⋈S,R⋈S,σA=C(R×
S),S⋉R。
R⋈SABCR⋈SR.AR.BS.BC
abcabbc
abdabbd
cbccbbc
cbdcbbd
dea
S⋉RBC
bc
bd
2.17设有4个关系:
S(S#,SNAME,AGE,SEX)
SC(S#,C#,SCORE)
C(C#,CNAME,T#)
T(T#,TNAME,TITLE)
试用关系代数表达式表示下列查询语句:
①检索年龄小于17岁的女学生的学号和姓名。
②检索年男学生所学课程的课程号和课程名。
③检索男学生所学课程的任课教师的工号和姓名。
④检索至少选修两门课程的学生学号。
⑤检索至少有学号为S2和S4学生选修的课程的课程号。
⑥检索WANG同学不学的课程的课程号。
⑦检索全部学生都选修的课程的课程号与课程名。
⑧检索选修课程包含LIU老师所授全部课程的学生学号。
⑴πS#,SNAME(σAGE<
’17’∧SEX=’F’(S))
⑵Πc#,CNAME(σSEX='
M'
(S⋈SC⋈C))
⑶ΠT#,TNAME(σSEX='
(S⋈SC⋈C⋈T))
⑷π1(σ1=4∧2≠5(SC×
SC))
⑸π2(σ1=S2∧4=S4∧2=5(SC×
⑹πC#(C)-πC#(σSNAME='
WANG'
(S⋈SC))
⑺πC#,CNAME(C⋈(πS#,C#(SC)÷
πS#(S)))
⑻πS#,C#(SC)÷
πC#(σTNAME='
LIU'
(C⋈T))
2.21在教学数据库的关系S、SC、C中,用户有一查询语句:
检索女同学选修课程的课程名和任课教师名。
①试写出该查询的关系代数表达式。
②画出查询表达式的语法树。
③使用启发式优化算法,对语法树进行优化,并画出优化后的语法树。
①关系代数表达式为:
πCNAME,TEACHER(σSEX=’F’(S⋈SC⋈C⋈T))
上述的关系代数表达式为:
πCNAME,TEACHER(σSEX=’F’(πL(σS.S#=SC.S#∧SC.C#=C.C#((S×
SC)×
C))))
此处L为S、SC、C中全部属性(公共属性只取一次)。
σ
②上述关系代数表达式的语法树如图2.2所示。
图2.2
C.T#=T.T#
③上述的关系代数表达式为:
×
优化后的语法树如图2.3所示。
T#,TNAME
图2.3
S.S#=SC.S#
S#,C#
SEX='
F'
第三章
3.2对于教学数据库的4个基本表
S(S#,SNAME,AGE,SEX)
试用SQL的查询语句表达下列查询:
①SELECTS#,SNAME
FROMS
WHEREAGE<
23ANDSEX=’F’;
2SELECTC.C#,CNAME
FROMS,SC,C
WHERES.S#=SC.S#ANDSC.C#=C.C#ANDSEX=’M’;
③SELECTT#,TEACHER
FROMS,SC,C,T
WHERES.S#=SC.S#ANDSC.C#=C.C#ANDC.T#=T.T#ANDSEX=’M’;
④SELECTDISTINCTX.S#
FROMSCASX,SCASY
WHEREX.S#=Y.S#ANDX.C#!
=Y.C#
⑤SELECTDISTINCTX.C#
WHEREX.S#=S2ANDY.S#=S4ANDX.C#=Y.C#;
嵌套写法:
SELECTC#
FROMSC
WHERES#=S2ANDC#IN
(SELECTC#
FROMSC
WHERESC.S#=S4);
6SELECTC#
FROMC
WHERENOTEXISTS
(SELECT*
FROMS,SC
WHERES.S#=SC.S#ANDSC.C#=C.C#
ANDSNAME=’WANG’);
7SELECTC#,CNAME
(SELECT*
FROMSC
WHERES#=S.S#ANDC#=C.C#));
8SELECTDISTINCTS#
FROMSCASX
FROMC
WHERETNAME=’LIU’
ANDNOTEXISTS
(SELECT*
FROMSCASY
WHEREY.S#=X.S#ANDY.C#=C.C#));
3.7试用SQL查询语句表达下列对3.2题中4个基本表S、SC、C、T的查询:
①统计有学生选修的课程门数。
②求选修C4课程的女学生的平均年龄。
③求LIU老师所授课程的每门课程的平均成绩。
④统计每门课程的学生选修人数(超过10人的学生才统计)。
要求显示课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。
⑤检索学号比WANG同学大,而年龄比他小的学生姓名。
⑥在表SC中检索成绩为空值的学生学号和课程号。
⑦检索姓名以L打头的所有学生的姓名和年龄。
⑧求年龄大于女同学平均年龄的男学生姓名和年龄。
⑨求年龄大于所有女同学年龄的男学生姓名和年龄。
①SELECTCOUNT(DISTINCTC#)
FROMSC;
②SELECTAVG(AGE)
FROMS,SC
WHERES.S#=SC.S#ANDC#=’C4’ANDSEX=’F’;
③SELECTC.C#,AVG(GRADE)
FROMSC,C,T
WHERESC.C#=C.C#ANDSC.T#=T.T#TNAME=‘LIU’
GROUPBYC.C#;
④SELECTC#,COUNT(S#)
FROMSC
GROUPBYC#
HAVINGCOUNT(*)>
10
ORDERBY2DESC,1;
⑤SELECTSNAME
FROMS
WHERES#>
ALL(SELECTS#
FROMS
WHERESNAME=’WANG’)
ANDAGE<
WHERESNAME=’WANG’);
⑥SELECTS#,C#
WHEREGRADEISNULL;
⑦SELECTSNAME,AGE
WHERESNAMELIKE’L%’;
⑧SELECTSNAME,AGE
WHERESEX=’M’
ANDAGE>
(SELECTAVG(AGE)
WHERESEX=’F’);
⑨SELECTSNAME,AGE
ANDAGE>
ALL(SELECTAGE
3.8对于下面的关系R和S,试求出下列各种联接操作的执行结果:
①RNATURALINNERJOINS
②RNATURALRIGHTOUTERJOINS
③RRIGHTOUTERJOINSUSING(C)
④RINNERJOINS
⑤RFULLOUTERJOINSONfalse
R
A
B
S
D
a1
b1
c1
d1
a2
b2
c2
d2
a3
b3
c3
b4
c4
d4
①
②
③
R.B
S.B
null
④
R.C
S.C
⑤
3.12试用SQL更新语句表达对3.2题教学数据库中关系S、SC、C、T的更新操作:
①往关系C中插一个课程元组('
C8'
,'
VC++'
T6'
)。
②检索所授每门课程平均成绩均大于80分的教师姓名,并把检索到的值送往另一个已存在的表FACULTY(TNAME)。
③在SC中删除尚无成绩的选课元组。
④把选修LIU老师课程的女同学选课元组全部删去。
⑤把MATHS课不及格的成绩全改为60分。
⑥把低于所有课程总平均成绩的女同学成绩提高5%。
⑦在表SC中修改C4课程的成绩,若成绩小于等于70分时提高5%,若成绩大于70分时提高4%(用两种方法实现,一种方法是用两个UPDATE语句实现,另一种方法是用带CASE操作的一个UPDATE语句实现)。
⑧在表SC中,当某个成绩低于全部课程的平均成绩时,提高5%。
①INSERTINTOC
VALUES('
);
②INSERTINTOFACULTY(TNAME)
SELECTDISTINCTTNAME
FROM(SELECTTNAME,C.C#,AVG(GRADE)
FROMSC,C,T
WHERESC.C#=C.C#ANDC.T#=T.#
GROUPBYT#,C.C#)
ASRESULT(TNAME,C#,AVG_GRADE)ASX
WHERE80<
=ALL(SELECTAVG_GRADE
FROMRESULTASY
WHEREY.TEACHER=X.TEACHER);
③DELETEFROMSC
WHERESCOREISNULL;
④DELETEFROMSC
WHERES#IN(SELECTS#FROMSWHERESEX='
)
ANDC#IN(SELECTC#FROMC,TWHEREC.T#=T.#ANDTNAME='
⑤UPDATESC
SETSCORE=60
WHERESCORE<
60
ANDC#IN(SELECTC#FROMCWHERECNAME='
MATHS'
⑥UPDATESC
SETSCORE=SCORE*1.05
ANDSCORE<
(SELECTAVG(SCORE)FROMSC);
⑦用两个UPDATE语句实现:
UPDATESC
SETSCORE=SCORE*1.04
WHEREC#='
C4'
ANDSCORE>
70;
ANDSCORE<
=70;
(这两个UPDATE语句的顺序不能颠倒。
用一个UPDATE语句实现:
SETSCORE=SCORE*CASE
WHENSCORE>
70THEN1.04
ELSE1.05
END
;
⑧UPDATESC
SETSCORE=SCORE*1.05
WHERESCORE<
(SELECTAVG(SCORE)
FROMSC);
3.13设数据库中有三个关系:
职工表EMP(E#,ENAME,AGE,SEX,ECITY),
其属性分别表示职工工号、姓名、年龄、性别和籍贯。
工作表WORKS(E#,C#,SALARY),
其属性分别表示职工工号、工作的公司编号和工资。
公司表COMP(C#,CNAME,CITY),
其属性分别表示公司编号、公司名称和公司所在城市。
试用SQL语句写出下列操作:
①用CREATETABLE语句创建上述三个表,需指出主键和外键。
②检索超过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
C#CHAR(4)NOTNULL,
SALARYSMALLINT,
PRIMARYKEY(E#,C#),
FOREIGNKEY(E#)REFERENCESEMP(E#),
FOREIGNKEY(C#)REFERENCESCOMP(C#));
②SELECTE#,ENAME
FROMEMP
WHEREAGE>
50ANDSEX='
③SELECTEMP.E#,ENAME
FROMEMP,WORKS
WHEREEMP.E#=WORKS.E#ANDSALARY>
1000;
④SELECTA.E#,A.ENAME
FROMEMPA,WORKSB,WORKSC
WHEREA.E#=B.E#ANDB.E#=C.E#
ANDB.C#='
ANDC.C#='
⑤SELECTA.E#,A.ENAME
FROMEMPA,WORKSB,COMPC
WHEREA.E#=B.E#ANDB.C#=C.C#
ANDCNAME='
联华公司'
ANDSALARY>
1000
ANDSEX='
⑥SELECTE#,COUNT(C#)ASNUM,SUM(SALARY)ASSUM_SALARY
FROMWORKS
GROUPBYE#;
⑦SELECTX.E#
FROMWORKSX
FROMWORKSY
WHEREE#='
E6'
ANDNOTEXISTS
FROMWORKSZ
WHEREZ.E#=X.E#
ANDZ.C#=Y.C#));
⑧SELECTA.E#,A.ENAME
ANDCNAME='
ANDSALARY<
(SELECTAVG(SALARY)
FROMWORKS,COMP
WHEREWORKS.C#=COMP.C#
⑨UPDATEWORKS
SETSALARY=SALARY+100
WHEREE#IN(SELECTE#FROMEMPWHEREAGE>
50);
⑩DELETEFROMWORKS
WHEREE#IN(SELECTE#FROMEMPWHEREAGE>
60);
DELETEFROMEMP
WHEREAGE>
60;
3.14对第3.13题中的关系建立一个有关女职工信息的视图EMP_WOMAN,属性包括(E#,ENAME,C#,CNAME,SALARY)。
然后对视图EMP_WOMAN操作,检索每一位女职工的工资总数。
(假设每个职工可在多个公司兼职)
CREATEVIEWEMP_WOMAN
ASSELECTA.E#,A.ENAME,C.C#,CNAME,SALARY
ANDSEX='
SELECTE#,SUM(SALARY)
FROMEMP_WOMAN
GROUPBYE#;
3.15对于3.2题的教学数据库中基本表SC,建立一个视图:
CREATEVIEWS_SCORE(S#,C_NUM,AVG_SCORE)
ASSELECTS#,COUNT(C#),AVG(SCORE)
FROMSC
GROUPBYS#;
试判断下列查询和更新操作是否允许执行。
如允许,写出转换到基本表SC上的相应操作。
①SELECT*
FROMS_SCORE;
②SELECTS#,C_NUM
FROMS_SCORE
WHEREAVG_SCORE>
80;
③SELECTS#,AVG_SCORE
WHEREC_NUM>
(SELECTC_NUM
FROMS_SCORE
WHERES#='
S4'
④UPDATES_SCORE
SETS#='
S3'
WHERES#='
⑤DELETEFROMS_SCORE
WHEREC_NUM>
4;
答:
①允许查询。
相应的操作如下:
SELECTS#,COUNT(C#)ASC_NUM,AVG(SCORE)ASAVG_SCORE
②允许查询。
SELECTS#,COUNT(C#)ASC_NUM
GROUPBYS#
HAVINGAVG(SCORE)>
80;
③允许查询。
相应的操作
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 原理 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)