数据库关系代数练习
现在有关系模式如下所示: 1
2
3
4Department(dNo,dName,officeRoom,homePage)
Student(sNo,sName,sex,age,dNo)
Course(cNo,cName,cPNo,credit,dNo)
SC(sNo,cNo,score,recorddate)
一、基本查询
- 查询所有年龄小于18岁的男生姓名
\[\pi_{sname}(\sigma_{age<18\bigwedge sex='man'}(student))\]
- 查询所有学分大于3的课程名称
\[\pi_{cname}(\sigma_{credit>3}(course))\] - 查询所有没有先修课的课程名称
\[\pi_{cname}(\sigma_{cPNo\ is\ null}(course))\]
二、连接查询
- 查询“信息学院”所有学生姓名
\[\pi_{sname}((\sigma_{dname='\text{信息学院}'}(department))\Join student)\]
- 查询所有具有不及格记录的学生姓名
\[\pi_{sname}((\sigma_{score<60}(SC))\Join student)\]
- 查询“信息学院”所有年龄小于18岁的女生姓名
\[\pi_{sname}((\sigma_{age<18\bigwedge sex='female'}(student))\Join (\sigma_{dname='\text{信息学院}'}(department)))\]
- 查询所有选修了“数据库”课程的学生姓名
\[\pi_{sname}(\pi_{cno}(\pi_{cname='\text{数据库}'}(course))\Join SC \Join student)\]
- 查询“信息学院”所有选修了“科学技术简史”课程的学生姓名
\[\pi_{sname}(\pi_{sno}(\sigma_{cname='\text{科学技术简史}'}(course))\Join SC\Join student \Join(\pi_{cname='\text{信息学院}'}(department)))\]
- 查询选修了“数据结构”课程并且不及格的学生姓名
\[\pi_{sname}(\pi_{cno}(\sigma_{cname='\text{数据结构}'}(course))\Join (\sigma_{credit<60}(SC))\Join student)\]
- 查询“计算机学院”选修了“概率论”课程且成绩大于等于80分的学生姓名
\[\pi_{sname}((\sigma_{dname='\text{计算机学院}'}\Join \pi_{cno}(\sigma_{cname='\text{概率论}'}(course))\Join (\sigma_{score\geq 80}(SC))\Join student)\]
- 查询“文学院”开设的所有学分大于等于3的课程名称
\[\pi_{cname}((\sigma_{dname='\text{文学院}'}(department))\Join \sigma_{credit \geq 3}(course)))\]
- 查询“信息学院”所有选修了“数据库”课程并且不及格的学生姓名及分数
\[\pi_{sname,score}((\sigma_{dname='\text{信息学院}'}(department))\Join (\pi_{cno}(\sigma_{cname='\text{数据库}'}(course)))\Join (\sigma_{score<60}(SC))\Join student)\]
- 查询“王强”同学所选修的全部课程名称、学分以及开课学院。
\[\pi_{cname,credit,dname}(\pi_{cno}(\sigma_{sname='\text{王强}'}(student)\Join SC)\Join course \Join department)\]
三、综合查询
- 查询选修了“数据库”或者选修了“算法”课程的学生姓名
\[\pi_{sname}(\sigma_{cname='\text{数据库}'\bigvee cname='\text{算法}'}(course))\Join SC \Join student)\]
- 查询选修了“数据库”并且选修了“算法”课程的学生姓名
\[\pi_{sname((\pi_{sno,cno}(SC)\div(\sigma_{cname='\text{数据库}'}\bigwedge cname='\text{算法}'}(course))\Join student)\]
- 查询选修了“数据库”但没有选修“算法”课程的学生姓名
\[\pi_{sname}((\pi_{sno}(\sigma_{cname='\text{数据库}'}(course))\Join SC)-(\pi_{sno}(\sigma_{cname='\text{算法}'}(course))\Join SC))\Join student)\]
- 查询没有选修“算法”课程的学生姓名
\[\pi_{sname}(student)-\pi_{sname}(\sigma_{cname='\text{算法}'}(course)\Join SC \Join student)\]
- 查询仅仅选修了“算法”一门课程的学生姓名
\[\pi_{sname}((\pi_{sno}(SC)-\pi_{sno}(\pi_{cname<>'\text{算法}'}(course)\Join SC))\Join student)\]
- 查询选修了“信息学院”开设的所有课程的学生姓名
\[\pi_{cno,sname}(SC\Join student)\div\pi_{cno}((\sigma_{dname='\text{信息学院}'}(department))\Join course)\]
- 查询选修了所有学分大于3课程的学生姓名
\[\pi_{sname}(\pi_{cno,sno}(SC)\div\pi_{cno}(\sigma_{credit>3}(course))\Join student)\]
- 查询“数据库”课程所有不及格学生姓名及所在学院
\[\pi_{sname,dname}((\pi_{sno}(\sigma_{cname='\text{数据库}'}(course)\Join \sigma_{score<60}(SC))\Join student\Join department))\]
- 查询“数据库”先修课的课程名称
\[\pi_{cname}(\pi_{cpno}(\sigma{cname='\text{数据库}'}(course \ \ AS\ \ C1)){\mathop \Join\limits_{C1.cpno=C2.cno}}(course\ \ AS\ \ C2))\]
- 查询先修课为“数据库”的课程名称
\[\pi_{cname}(\pi_{cpno}(\sigma{cname='\text{数据库}'}(course \ \ AS\ \ C1)){\mathop \Join\limits_{C1.cno=C2.cpno}}(course\ \ AS\ \ C2))\]