提要:
本文章讲述我的第一次数据库实验捏
这节课主要是一些关系代数的内容,有点牛
这里面就是一堆表,这节课的主要内容也就是关系代数和这么表达这些表里的各个数据的关系
关系代数
关系代数 π
我看来类似于select name from student;
关系代数 ρ
类似于as
以上代码也就表示student as b,也就是用b来代替student表示了
关系代数⨯
这个符号就相当于笛卡尔积,这样看来这个数据库的查询还是挺不简单的,查询一个字段时,把两个表像这样弄着就相当于在这两个表的笛卡尔积里查询了。
关系代数 σ
在我看来类似于where
关系代数 -
差集,关键词except
[SQL语句 1]
Except
[SQL语句 2];
关系代数 ∪
并集,关键词union
[SQL语句 1]
UNION
[SQL语句 2];
关系代数 ∩
交集,关键词intersect
[SQL语句 1]
InterSect
[SQL语句 2];
实验内容:
相对而言实验的内容也逐渐清晰了
离谱捏,关系代数的写法好怪,动不动就要加空格
查询所有老师和学生的姓名
查询老师名字
select name from instructor;
//
π name instructor
查询学生名字
select name from student;
//
π name student
查询Kim老师办公地点
select b.building from department as b,instructor as a 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)))
查询CS系学生的学分情况
select t.tot_cred from student as t where t.dept_name ='Comp. Sci.';
//
π t.tot_cred ( σ t.dept_name = 'Comp. Sci.' ρ t student )
查询课程database成绩在90分以上的等级为A的学生信息
select s.* from student as s, course as c, takes as t where c.title='Database System Concepts' and s.dept_name = c.dept_name and c.course_id = t.course_id and t.grade = 'A';
//
π s.ID,s.name,s.dept_name,s.tot_cred σ c.title = 'Database System Concepts' and s.dept_name = c.dept_name and c.course_id = t.course_id and t.grade = 'A' (ρ s student ⨯ ρ c course ⨯ ρ t takes)
查询没有选修任何课程的学生信息
我的
select s.* from student as s
except
select s.* from student as s,takes as t where s.ID = t.ID;
答案的,但是答案的sql语句想不通捏
π b.ID,b.name,b.dept_name,b.tot_cred σ a.ID=b.ID ((ρ a ((π ID
student) - (π ID takes))) ⨯ (ρ b (student)))