您值得收藏的关系代数与Sql练习网站及实战操作
- 2019 年 10 月 6 日
- 筆記
MySQL学习仓库Up-Up-MySQL,这是一个学习MySQL从入门实战到理论完善,再到精通的一个仓库,后面会把MySQL的学习资料上传上去!欢迎大家star与fork起来!
仓库地址:
https://github.com/Light-City/Up-Up-MySQL
也可以点击阅读原文!
今天上手第五弹,关系代数与Sql练习网站!
1.Relax
使用地址:http://dbis-uibk.github.io/relax/calc.htm#
这是一个sql与关系代数练习网站!非常好用,下面来看使用!
如下图所示:支持sql与关系代数语法!
选择数据集:
输入查询语句:(ps 看图发现自动生成关系代数,强不强大!)
输入关系代数:
2.实战题目:
用关系代数描述以下查询要求: 查询所有老师和学生的姓名 查询Kim老师的办公地点 查询CS系学生的学分情况 查询database课程成绩在90分以上的学生信息 查询没有选修任何课程的学生信息
选用数据库为Siberschatz-UniversityDB:
关键表解释:
instructor(ID, name, dept_name, salary) deptment(dept_name, building, budget) student(ID, name, dept_name, tot_cred) course(course_id, title, dept_name, credts) takes(ID, course_id, semester, year, grade) 教师信息instructor:教师号ID,教师名字name,教师所在的系dept_name,薪资salary 建筑department:系名dept_name, 建筑building, 预算budget 学生信息student:学生学号ID,学生姓名name,学生所在系dept_name,总学分tot_cred 课程course:课程号course_id,课程名称title,课程所属的系名dept_name,学分credits 选课信息takes:学生学号ID,课程标识course_id,课程段标识sec_id,学期semester,年份year,成绩grade
找出所有老师与学生的名字
所有老师:
select distinct name from instructor;
对应的关系代数:
π name (instructor)
所有学生:
select distinct name from student;
对应的关系代数:
π name (student)
查询Kim老师的办公地点
select b.building from instructor as a, department as b where a.name='Kim' and a.dept_name=b.dept_name;
对应的关系代数:
π b.building (σ a.name = 'Kim' and a.dept_name = b.dept_name ((ρ a instructor) ⨯ (ρ b department)))
先将department
与instructor
进行笛卡尔积,然后选择Kim老师的数据,再对building
进行投影,得到办公地点。
查询CS系学生的学分情况
select tot_cred from student where dept_name='Comp. Sci.';
对应的关系代数:
π ID, name, tot_cred σ dept_name = 'Comp. Sci.' (student)
查询database课程成绩在90分以上(等级为A)的学生信息
select s.*,t.grade from student as s,course as c,takes as t where s.dept_name=c.dept_name and t.course_id=c.course_id and c.title='Database System Concepts' and t.grade='A';
对应的关系代数:
π s.ID,s.name,s.dept_name,s.tot_cred σ c.title='Database System Concepts' and t.grade='A' and c.dept_name=s.dept_name and c.course_id=t.course_id (ρ c course ⨯ ρ t takes ⨯ ρ s student)
查询没有选修任何课程的学生信息
π b.ID,b.name,b.dept_name,b.tot_cred σ a.ID=b.ID ((ρ a ((π ID student) - (π ID takes))) ⨯ (ρ b (student)))
先选出所有的学生ID再减去选课表中的学生ID,然后根据ID去检索学生表的信息,就是没有选修任何课程的学生信息。