关系代数运算是数据库的基础,首先提供一个神仙网站:关系代数,这个网站同时提供关系代数查询和SQL语句查询,可以检查关系代数的正确性,以及把SQL语句转为关系代数运算式。网站还有使用教程,简直不能太贴心!
但是他不支持的部分SQL语句,这些都在help中有详细说明。
help中说该网站支持Count等集合查询,但我至今没搞懂使用方法。。。我知道后会更新,如果有小伙伴知道欢迎留言!
进入正题
首先贴四个表,可粘贴复制进上面提供的那个网站直接使用:
1. Student表:
Student = {
Sno, Sname, Ssex, Sbirthday, Class
'108', '曾华', '男', 1977-09-01, '95033'
'105', '匡明', '男', 1975-10-02 '95031'
'107', '王丽', '女', 1976-01-23, '95033'
'101', '李军', '男', 1976-02-20, '95033'
'109', '王芳', '女', 1975-02-10, '95031'
'103', '陆君', '男', 1974-06-03, '95031'
}
2. Course表:
Course = {
Cno, Cname, Tno
'3-105', '计算机导论', '825'
'3-245', '操作系统', '804'
'6-166', '数字电路', '856'
'9-888', '高等数学', '831'
}
3. Score表:
Score = {
Sno, Cno, Degree
'103', '3-245', 86
'105', '3-245', 75
'109', '3-245', 68
'103', '3-105', 92
'105', '3-105', 88
'109', '3-105', 76
'101', '3-105', 64
'107', '3-105', 91
'102', '3-105', 78
'101', '6-166', 85
'107', '6-166', 79
'108', '6-166', 81
}
4. Teacher表:
Teacher = {
Tno, Tname, Tsex, Tbirthday, Prof, Depar
'804', '李诚', '男', 1958-12-02, '副教授', '计算机系'
'856', '张旭', '男', 1969-03-12, '讲师', '电子工程系'
'825', '王萍', '女', 1972-05-05, '助教', '计算机系'
'831', '刘冰', '女', 1977-08-14, '助教', '电子工程系'
}
题目及答案
- 查询Student表中的所有记录的Sname、Ssex和Class列。
π Sname, Ssex, Class (Student) - 查询教师所有的单位即不重复的Depart列。
π Depart (Teacher) - 查询Student表的所有记录。
π (Student) - 查询Score表中成绩在60到80之间的所有记录。
σ Degree >= 60 ∧ Degree <= 80 (Score) - 查询Score表中成绩为85,86或88的记录。
σ Degree = 85 ∨ Degree = 86 ∨ Degree = 88 (Score) - 查询Student表中“95031”班或性别为“女”的同学记录。
σ Class = ‘95031’ ∨ Ssex = ‘女’ (Student) - 以Class降序查询Student表的所有记录。
τ Class desc Student - 以Cno升序、Degree降序查询Score表的所有记录。
τ Cno asc, Degree desc Score - 查询Score表中的最高分的学生学号和课程号。
(π Sno, Cno (Score) – π Score.Sno, Score.Cno (Score ⨝ Score.Degree > S1.Degree (ρ S1 Score)))
∪
(π Sno, Cno (Score) – π Score.Sno, Score.Cno (Score ⨝ Score.Degree < S1.Degree (ρ S1 Score))) - 查询分数大于70,小于90的Sno列。
π Sno (σ Degree > 70 ∧ Degree < 90 (Score)) - 查询所有学生的Sname、Cno和Degree列。
π Sname, Cno, Degree (Student ⨝ Student.Sno = Score.Sno Score) - 查询所有学生的Sno、Cname和Degree列。
π Sno, Cname, Degree (Score ⨝ Course.Cno = Score.Cno Course) - 查询所有学生的Sname、Cname和Degree列
π Sname, Cname, Degree ((Student ⨝ Student.Sno = Score.Sno Score) ⨝ Score.Cno = Course.Cno Course) - 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。
π ST.Sno, ST.Sname (σ SC1.Sno = ST.Sno ∧ SC1.Cno = ‘3-105’ ∧ SC2.Cno = ‘3-105’ ∧ SC2.Sno = ‘109’ ∧ SC1.Degree > SC2.Degree (ρ ST Student ⨯ ρ SC1 Score ⨯ ρ SC2 Score)) - 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。
π s1.Sno, s1.Sname, s1.Sbirthday σ year(s1.Sbirthday) = year(s2.Sbirthday) and s2.Sno = ‘107’ (ρ s1 Student ⨯ ρ s2 Student) - 查询“张旭“教师任课的学生成绩。
π ST.Sno, ST.Sname, SC.Degree σ T.Tname = ‘张旭’ ∧ T.Tno = C.Tno ∧ C.Cno = SC.Cno ∧ SC.Sno = ST.Sno ( ρ ST Student ⨯ ρ C Course ⨯ ρ SC Score ⨯ ρ T Teacher - 查询95033班和95031班全体学生的记录。
σ ST.Class = ‘95033’ ∨ ST.Class = ‘95031’ ρ ST Student - 查询存在有85分以上成绩的课程Cno.
π Cno σ Degree > 85 Score - 查询出“计算机系“教师所教课程的成绩表。
π SC.Sno, SC.Cno, SC.Degree σ T.Depart = ‘计算机系’ ∧ T.Tno = C.Tno ∧ C.Cno = SC.Cno (ρ T Teacher ⨯ ρ C Course ⨯ ρ SC Score) - 查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。
π T1.Tname, T1.Prof, T2.Tname, T2.Prof σ T1.Depart = ‘计算机系’ and T2.Depart = ‘电子工程系’ and T1.Prof ≠ T2.Prof (ρ T1 Teacher ⨯ ρ T2 Teacher) - 查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree.
π S1.Sno, S2.Cno, S2.Degree σ S1.Sno = S2.Sno ∧ S1.Cno = ‘3-105’ ∧ S2.Cno = ‘3-245’ and S1.Degree > S2.Degree (ρ S1 Score ⨯ ρ S2 Score) - 查询所有教师和同学的name、sex和birthday.
ρ name←Sname, sex←Ssex, birthday←Sbirthday π Sname, Ssex, Sbirthday Student ∪ ρ name←Tname, sex←Tsex, birthday←Tbirthday π Tname, Tsex, Tbirthday Teacher - 查询所有“女”教师和“女”同学的name、sex和birthday.
ρ name←Sname, sex←Ssex, birthday←Sbirthday π Sname, Ssex, Sbirthday σ Ssex = ‘女’ Student ∪ ρ name←Tname, sex←Tsex, birthday←Tbirthday π Tname, Tsex, Tbirthday σ Tsex = ‘女’ Teacher - 查询所有任课教师的Tname和Depart.
π T.Tname, T.Depart σ T.Tno = C.Tno ∧ C.Cno = SC.Cno (ρ T Teacher ⨯ ρ C Course ⨯ ρ SC Score) - 查询所有未讲课的教师的Tname和Depart.
π Tname, Depart (Teacher) – π T.Tname, T.Depart σ T.Tno = C.Tno ∧ C.Cno = SC.Cno (ρ T Teacher ⨯ ρ C Course ⨯ ρ SC Score) - 查询Student表中不姓“王”的同学记录。
Student – σ Sname like ‘王%’ Student - 查询Student表中最大和最小的Sbirthday日期值。
(π Sbirthday (Student) – π ST1.Sbirthday ((ρ ST1 Student) ⨝ ST1.Sbirthday < ST2.Sbirthday (ρ ST2 Student)))
∪
(π Sbirthday (Student) – π ST1.Sbirthday ((ρ ST1 Student) ⨝ ST1.Sbirthday > ST2.Sbirthday (ρ ST2 Student))) - 以班号和年龄从大到小的顺序查询Student表中的全部记录。
τ Class desc, Sbirthday asc Student - 查询“男”教师及其所上的课程。
π T.Tname, C.Cname σ T.Tsex = ‘男’ ∧ T.Tno = C.Tno (ρ T Teacher ⨯ ρ C Course) - 查询最高分同学的Sno、Cno和Degree列。
π Sno, Cno, Degree (Score) – π Score.Sno, Score.Cno, Score.Degree (Score ⨝ Score.Degree < S1.Degree (ρ S1 Score)) - 查询和“李军”同性别的所有同学的Sname.
π S1.Sname σ S1.Ssex = S2.Ssex ∧ S1.Sname ≠ ‘李军’ ∧ S2.Sname = ‘李军’ (ρ S1 Student ⨯ ρ S2 Student) - 查询和“李军”同性别并同班的同学Sname.
π S1.Sname σ S1.Ssex = S2.Ssex ∧ S1.Class = S2.Class ∧ S1.Sname ≠ ‘李军’ ∧ S2.Sname = ‘李军’ (ρ S1 Student ⨯ ρ S2 Student) - 查询所有选修“计算机导论”课程的“男”同学的成绩表。
π ST.Sname, ST.Sno, SC.Degree σ ST.Ssex = ‘男’ and ST.Sno = SC.Sno and SC.Cno = C.Cno and C.Cname = ‘计算机导论’ (ρ ST Student ⨯ ρ SC Score ⨯ ρ C Course)
以上所有答案均可以在最上面推荐的网站中直接粘贴复制使用,如有错误望留言告知,谢谢!
做完上述习题后心得如下:
- 关系代数实现最大最小用 “-” 求补
- 最基本的关系代数无法实现Count,对应的求平均值之类需要用到Count的方法也无法实现
今天的文章关系代数习题及答案分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/10145.html