《数据库学习打卡》第1天(关系代数语句篇)

4月3日—关系代数

1、其实早在一个月以前我就有想过把每天学的东西在这里总结一下,但是,很不幸的是以我这个间接性踌躇满志的性子,也许一分钟以后就把这件事抛到九霄云外去了。
2、这里废话就不多说了,太浪费时间,把每天的笔记写起来。

一、应用题:
设有如下所示的关系
S(S#,SNAME,AGE,SEX) C(C#,CNAME,TEACHER)和SC(S#,C#,GRADE)。
试用关系代数表达式表示下列查询语句:
注:以下例题加粗的为典型题目。
(1)检索“程军”老师所授课程的课程号(C#)和课程名(CNAME)。
∏C#,Cname(σ Teacher = ‘程军’©)
//1.从课程表C里选择老师姓名为’程军’,然后再投影他所授课程的课程号和课程名

(2)检索年龄大于21的男学生学号(S#)和姓名(SNAME)。
∏S#,Sname(σ age>21 ^ sex=‘男’(S))
//1.从s表中选择出年龄大于21 ^ 性别为男的学生的学号和姓名

(3)检索至少选修“程军”老师所授全部课程的学生姓名(SNAME)。
∏Sname(S▷◁∏S#,C#(SC) ÷ ∏C#(σ Teacher = '程军’©))

//1.首先从C表中查询出程军老师所授课程的C#(课程号)
//2.然后使用SC表的C#(课程号)对该C#(课程号)做除运算,得到选修了该C#的学生的S#(学号)
//3.最后使用该S#连接S表投影出对应学生的姓名

(4)检索”李强”同学不学课程的课程号(C#)。
∏C#©- ∏C#(σ Sname = ‘李强’(S▷◁ SC) )

//1.先把学生表S与SC表连接,再选择出李强已学课程的课程号
//2.然后用课程表C的所有课程号 - 李强已选的课程 = 得到李强不学课程的课程号

(5)检索至少选修两门课程的学生学号(S#)。

∏S#(σ 1 = 4 ^ 1 = 4 (SC×SC))
//1.先将SC表与SC表做笛卡尔积
//2.再选择出两个表中S#相等,但C#不相等的学生学号
//3.最后投影出选修了两门课程学生的学号S#
//注意:这里的 1 = 4 ^ 1 = 4 指的是列号(第几列),也就是两个表做笛卡尔积后,相同属性名进行连接。

(6)检索全部学生都选修的课程的课程号(C#)和课程名(CNAME)。

∏C#,Cname(C ▷◁ ∏S#,C#(SC) ÷ ∏S#(S))

//1.先将SC表和S表通过÷运算,选择出选修所有学生都选修的课程号
//2.再通过课程号C#连接C表得到所有学生都选修过的课程号和课程名

(7)检索选修课程包含“程军”老师所授课程之一的学生学号(S#)。

//0.通俗点来讲,要找的就是选修了程军老师所授课程的学生的学号
∏S#(SC ▷◁ ∏C#(σ Teacher = '程军’©))

∏S#(σ Teacher = ‘程军’(SC▷◁C))
//1.首先在课程表C里查询到程军老师所授课程的课程号
//2.然后通过课程号在SC表中找到选修了这门课程的学生的学号

(8)检索选修课程号为k1和k5的学生学号(S#)。

∏S#(C# = ‘K1’(SC)) ∩ ∏S#(C# = ‘K5’(SC))
//1.从课程表SC里查询选修了课程号为k1的学生学号
//2.再从课程表SC里查询选修了课程号为k5的学生学号
//3.求两者的∩交集,即两者共有的条件,也就是选修了k1和k5课程的学生学号。

(9)检索选修全部课程的学生姓名(SNAME)。
∏Sname(S ▷◁ ∏S#,C#(SC) ÷ ∏C#©)

//1.用SC表的课程号在C表里查询出所有选修了课程的学生的学号
//2.然后SC表通过学号连接S表,投影出和学号对应的学生的姓名

(10)检索选修课程包含学号为2的学生所修课程的学生学号(S#)。

∏S#,C#(SC) ÷ ∏C#(σ S# = ‘2’(SC))

(11)检索选修课程名为“C语言”的学生学号(S#)和姓名(SNAME)。

∏S#,Sname(σ Cname=‘C语言’(S▷◁SC▷◁C)))
//1.简单方法:直接将S▷◁SC▷◁C 这3张表做自然连接。
//2.然后选择出选修了课程名为’C语言’的,再投影学生的学号和姓名

(12)检所没有一门课程成绩不及格的学生学号,姓名

∏S#,Sname(S ▷◁ ∏S#(S) — ∏S#(σ Grade < 60(SC)))
//1.用S表中所有学生的学号—SC表中所有成绩不及格的学生的学号
//2.然后通过这些学号在S表中查询出对应的学号和姓名

  • 14
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值