数据库关系代数查询表达式解析

需积分: 33 5 下载量 80 浏览量 更新于2024-08-10 1 收藏 68KB DOC 举报
"数据库第二章关系代数习题" 在关系数据库中,关系代数是一种用于查询数据的数学表达式,它提供了对关系进行操作的方法。本习题涉及到多个关系代数表达式的应用,主要涉及的关系有S(学生),SC(选课),C(课程)。 1) 查询"程军"老师所授课的课程号(C#)和课程名(CNAME): 表达式:∏C#,CNAME(δTEACHER=程军(C)) 这个表达式首先在关系C中选择TEACHER字段等于'程军'的记录,然后投影出C#和CNAME字段。 2) 查询年龄大于21的男学生学号(S#)和姓名(SNAME): 表达式:∏S#,SNAME(δAGE>21∧SEX=男(S)) 此表达式在关系S中选择AGE大于21且SEX为'男'的记录,再投影出S#和SNAME字段。 3) 检索至少选修”程军”老师所授全部课程的学生姓名(SNAME): 表达式:∏SNAME((∏S#,C#(SC)÷∏C#(δTEACHER=程军(C)))[pic]S) 这个查询首先找出所有选修了程军老师课程的学生的S#和C#,然后将这些课程号与程军所教的所有课程号做除法运算,得到选修了程军所有课程的学生学号,最后投影出SNAME。 4) 检索”李强”同学不学课程的课程号(C#): 表达式:∏C#(C)-∏C#(δSNAME=李强(S)[pic]SC) 此表达式首先找出所有课程的C#,然后减去李强选修的课程号,得到李强未选修的课程号。 5) 检索至少选修两门课程的学号(S#): 表达式:∏S#(δ1=4∧2≠5(SC×SC))(1、4代表列数) 这里使用了自乘运算(SC×SC),然后通过条件1=4(即两行相同)和2≠5(表示相同的S#出现在不同行,即选修了两门课程)来筛选出至少选修两门课程的学生学号。 6) 检索全部学生都选修的课程的课程号(C#)和课程名(CNAME): 表达式:∏C#,CNAME(∏S#,C#(SC)÷∏S#(S)[pic]C) 首先找出所有学生选修过的课程,然后将这些课程号除以所有学生的学号,得到的是所有学生都选修过的课程,最后投影出C#和CNAME。 7) 检索选修课程包含”程军”老师所授课程之一的学生学号(S#): 表达式:∏C#(δTEACHER=程军(C)[pic]SC) 此表达式先找出程军所教的课程,然后与SC关系进行笛卡尔积,再投影出S#。 8) 检索选修课程号为k1和k5的学生学号(S#): 表达式:∏S#,C#(SC)÷∏C#(δC#=k1∨C#=k5(C)) 这一步是找出选修课程号为k1或k5的学生学号,通过除法运算得到结果。 9) 检索选修全部课程的学生姓名(SNAME): 表达式:∏SNAME((∏S#,C#(SC)÷∏C#(C))[pic]S) 此表达式找出所有学生选修的课程与所有课程进行除法运算,得到选修所有课程的学生学号,再通过S关系投影出SNAME。 10) 检索选修课程包含学号为2的学生所选修课程的学生学号(S#): 表达式:∏S#,C#(SC)÷∏C#(δS#=2(SC)) 该表达式先找出学号为2的学生所选修的课程,然后将这些课程号与SC关系进行除法运算,得到选修了这些课程的学生学号。 11) 检索选修课程名为”C语言”的学生学号(S#)和姓名(SNAME): 表达式:∏S#,SNAME(∏S#(SC[pic](δCNAME=C语言(C)))[pic]S) 首先找到课程名为"C语言"的记录,然后与SC关系进行笛卡尔积,最后通过S关系投影出S#和SNAME。 (12)查询没有一门课程的记录因为空,故不给出具体表达式。 这些关系代数表达式展示了如何利用数据库查询语言来解决实际问题,包括学生选课情况、教师授课信息等。它们涉及到的基本操作包括选择(δ),投影(∏),并集(+), 差(-),笛卡尔积([pic]),以及除法(÷)。通过理解这些表达式,可以更好地掌握关系数据库查询的原理和方法。