数据库系统原理与应用教程(013)—— 关系代数练习题

数据库系统原理与应用教程(013)—— 关系代数练习题

有以下三个关系:

学生(学号,姓名,性别,年龄,所在系)

课程(课程号,课程名,先行课)

选课(学号,课程号,成绩)

请使用关系代数表示以下查询要求:

1、求选修了课程号为【C2】课程的学生的学号。

π学号(σ课程号='C2'(选课))

当一个查询同时涉及到选择和投影操作,应先选择后投影。

2、求选修了课程号为【C2】课程的学生的学号和姓名。

在这里插入图片描述

或:

在这里插入图片描述

第一种方式先对学生表和选课进行连接运算,得出 C2 课程对应的姓名和其他学生信息。第二种方式先选择后连接,效率更高。

3、求没有选修课程号为【C2】课程的学生学号。

π学号(学生)- π学号(σ课程号='C2'(选课))

先通过投影得到全部学生的学号,然后去掉选修【C2】课程的学生的学号,就得到了没有选修课程号【C2】课程的学生学号。

本题不能写作:

π学号(σ课程号 ≠'C2'(选课))

原因:如果一个学生选修了多门课程,则学号会多次出现,如果选修了 C1 和 C2,则会出现在查询结果中。

如果有下面的学生表:

学号姓名性别年龄班级
S0001张三20物流201
S0002李四21物流201
S0003王五20物流201
S0004赵六18物流202
S0005刘七19物流202

查询年龄不是 20 的学生的学号和姓名,则如下的两种方法都可以使用:

π学号,姓名(学生)- π学号,姓名(σ年龄 = 20(学生))

或:

π学号,姓名(σ年龄 ≠ 20(学生))

4、求既选修了 C2 课程,又选修了 C3 课程的学生的学号。

π学号(σ课程号='C2'(选课))∩ π学号(σ课程号='C3'(选课))

先求出所有选修 C2 课程的学生的学号,再求出所有选修 C3 课程的学生的学号,最后使用交运算得到既选修了 C2 课程,又选修了 C3 课程的学生的学号。

本题不能写作:

π学号(σ课程号='C2'∧ 课程号='C3'(选课))

原因是:同一个属性不可能有两个值。任何一个课程号不可能既是 C2,又是 C3。

如果有下面的学生表:

学号姓名性别年龄班级
S0001张三20物流201
S0002李四21物流201
S0003王五20物流201
S0004赵六18物流202
S0005刘七19物流202

查询年龄是 20 岁的男生的学号和姓名,则如下的两种方法都可以使用:

π学号,姓名(σ性别='男'(学生))∩ π学号,姓名(σ年龄 = 20(学生))

或:

π学号,姓名(σ性别='男'∧ 年龄 = 20(学生))

可以这样理解:逻辑运算与(∧ )两边的条件表达式不能是同一个属性。

5、求选修了课程号为 C2 或 C3 的学生的学号。

π学号(σ课程号='C2'(选课))∪ π学号(σ课程号='C3'(选课))

也可以写作:

π学号(σ课程号='C2'∨ 课程号='C3'(选课))

6、求选修了全部课程的学生的学号。

π学号,课程号(选课)÷ 课程

除运算为包含运算,该题的含义是求某个学生所对应的课程号包含全部课程的课程号。

7、求至少选修了学号为【98002】的学生所学过的所有课程的学生的学号。

π学号,课程号(选课)÷ π课程号(σ学号='98002'(选课))

先对选课表执行选择运算,查询出学号为【98002】的学生所选修的课程,再通过投影运算,得到【98002】学生选修的课程的课程号。最后执行除运算,得到最终的结果。

  • 33
    点赞
  • 197
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

睿思达DBA_WGX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值