数据库原理及应用习题参考答案

3-7 设教务管理数据库中有三个关系 S(SNO,SNAME,AGE,SEX,SDEPT) SC(SNO,CNO,GRADE)

C(CNO,CNAME,CDEPT,TNAME)

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

⑴ 检索LIU老师所授课程的课程号、课程名。 ⑵ 检索年龄大于23岁的男学生的学号与姓名。

⑶ 检索学号为S3学生所学课程的课程名与任课教师名。 ⑷ 检索至少选修LIU老师所授课程中一门课的女学生姓名。 ⑸ 检索WANG同学不学的课程的课程号。 ⑹ 检索至少选修两门课程的学生学号。

⑺检索全部学生都选修的课程的课程号与课程名。 ⑻ 检索选修课程包含LIU老师所授课程的学生学号。 解:⑴ πC#,CNAME(σTEACHER=’LIU’(C))

⑵ πS#,SNAME(σAGE>’23’∧SEX=’M’(SC)) ⑶ πCNAME,TEACHER(σS#=’S3’(SC C)) ⑷ πSNAME(σSEX=’F’∧TEACHER=’LIU’(S SC C)) ⑸ πC#(C)-πC#(σSNAME=’WANG’(S SC)) ⑹ π1(σ1=4∧2≠5(SC×SC))

⑺ πC#,CNAME(C (πS#,C#(SC)÷πS#(S))) ⑻ πS#,C#(SC)÷πC#(σTEACHER=’LIU’(C))

3-8 在3.7题的三个关系中,用户有一查询语句:检索数学系的学生选修计算机系开设的课

程的课程名和任课教师姓名。

⑴ 试写出该查询的关系代数表达式。 ⑵ 试写出该查询优化的关系代数表达式。

⑶ 画出该查询初始的关系代数表达式的语法树。

⑷ 使用3.5.3节的优化算法,对语法树进行优化,并画出优化后的语法树。 解:⑴ πCNAME,TEACHER(σDEPT=‘数学系’(S SC C))

⑵ 设L1=πS#(σDEPT=‘数学系’(S)),L2=πS#,C#(SC),则优化的关系代数表达式为: AR.BS.BC

a c d b b e e b b a c d σA=C(R×S) 第 5 页

πCNAME,TEACHER(σSC.C#=C.C#(πSC.C#(σS.S#=SC.S#((L1×L2)×C))))

⑶ 查询初始的关系代数表达式可表达为:

πCNAME,TEACHER(σDEPT=‘数学系’(πL(σS.S#=SC.S#∧SC.C#=C.C#((S×SC)×C))))

此处L为S、SC、C中的全部属性(公共属性只取一次)。 ⑷ 优化后的语法树为

3-9 为什么要对关系代数表达式进行优化?

答:关系代数表达式由关系代数操作组合而成。操作中,以笛卡尔积和连接操作最费时间,并生成大量的中间结果。如果直接按表达式书写的顺序执行,必将花费很多时间,并生成大量的中间结果,效率较低。在执行前,由DBMS的查询子系统先对关系代数表达式进行优化,尽可能先执行选择和投影操作,以便减少中间结果,节省时间。

优化工作是由DBMS做的,用户书写时不必关心优化一事,仍以简练的形式书写。

习题4

4-1 名词解释

基本表 视图 实表 相关子查询 联接查询

嵌套查询 交互式SQL 嵌入式SQL 游标 答:

基本表:实际存储在数据库中的表,称为基本表。

CL S.S#=SC.S#∧SC.C#=C.C#DEPT=’数学系’πσCNAME,TEACHER×S SCCπσ×σ πDEPT=’数学系’σCNAME,TEACHER×S SCπ 第 6 页

视图:是从基本表或其他视图中导出的表,它本身不独立存储在数据库中,也就是数据库中只存放视图的定义而不存放视图的数据。

实表:是对基本表的别称。

相关子查询:SELECT语句嵌套时,子查询中查询条件依赖于外层查询中的值,因此子查询要反复求值供外层查询使用。这种子查询称为相关子查询。

连接查询:查询时要从多个基本表中提取数据,此时把多个基本表写在同一层的FROM子句中,这种查询形式称为连接查询。

嵌套查询:查询时要从多个基本表中提取数据,此时把多个基本表分别放在不同层次上的FROM子句中,这种查询形式称为嵌套查询。

交互式SQL:在终端交互方式使用的SQL语言。

嵌入式SQL:嵌入在高级语言的程序中使用的SQL语言。

游标:游标是与某一查询相联系的符号名。游标有游标关系和游标指针两层含义。在游标打开时,游标(指针)指向查询结果的第一个记录之前。 4-2 对于教务管理数据库的三个基本表 S(SNO,SNAME, SEX, AGE,SDEPT) SC(SNO,CNO,GRADE)

C(CNO,CNAME,CDEPT,TNAME) 试用SQL的查询语句表达下列查询:

⑴ 检索LIU老师所授课程的课程号和课程名。 ⑵ 检索年龄大于23岁的男学生的学号和姓名。

⑶ 检索学号为200915146的学生所学课程的课程名和任课教师名。 ⑷ 检索至少选修LIU老师所授课程中一门课程的女学生姓名。 ⑸ 检索WANG同学不学的课程的课程号。 ⑹ 检索至少选修两门课程的学生学号。

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

⑻ 检索选修课程包含LIU老师所授课程的学生学号。 解:

⑴ SELECT C#,CNAME FROM C

WHERE TEACHER=’LIU’;

⑵ SELECT S#,SNAME FROM S

WHERE AGE>23 AND SEX=’M’;

⑶ SELECT CNAME,TEACHER FROM SC,C

WHERE SC.C#=C.C# AND S#=’200915146’

⑷ SELECT SNAME (连接查询方式) FROM S,SC,C

WHERE S.S#=SC.S# AND SC.C#=C.C# AND SEX=’F’ AND TEACHER=’LIU’; 或:

SELECT SNAME (嵌套查询方式) FROM S

WHERE SEX=’F’AND S# IN (SELECT S#

第 7 页

联系客服:779662525#qq.com(#替换为@)