
【纯复习用】数据库笔记(4)Relational Algebra
目录ProjectionSelectionSlection exampleSet OperationsUnionSet differenceIntersectionCartesian Product笛卡儿积JoinNatural Join Exampleθ-Join ExampleRenaming ρDivisionOuter JoinExample查询语言(Query languages)是用于
·
目录
查询语言(Query languages)是用于提出问题或查询的专门语言,涉及数据库中的数据.
Relational Algebra:以操作符表示的查询
关系代数中的每一个操作符都接收(一个或两个)关系实例作为参数,并返回一个关系实例作为结果
- 一个关系代数表达式递归地定义为一个关系。
- 关系代数是一种程序查询语言,定义计算答案的一步步过程。
Projection 
- 删除不在投影列表L中的属性。
- 结果的schema包含投影列表中的字段,具有和input relation一样的名称
- (不知道上面在说什么,反正投影运算符消除重复的内容,并只保留当前的schema)
Selection 
- 选择一行(记录/元组),这一行满足选择条件c.
- 结果的schema与input relation的相同
- c的形式:Term Op Term
- Term 是一个属性名或者常数
- Op 是 <, >, =, ≠ 等符号
- 不同的条件可以用布尔表达式连接在一起
Slection example
得到的关系可以是另一个关系代数操作的输入!(Operator composition)
Set Operations
- Union(并集), Intersection, Set-difference(集合差)
- 这三个运算符都接收两个input relations, which一定是union-compatible(联合兼容的):
- 字段的数量相同
- 对应的字段具有相同的类型。
- 输出是一个single relation(不包含重复的东西)
Union
Set difference
Intersection
Cartesian Product笛卡儿积
将一个表的一行与另一个表的每一行结合起来
Join
- 通常所有元组的可能结合并不总是有意义的
- 在之前的例子中,将Can_Fly的每个元组与Plane的相应记录结合起来更有意义
- Join就是附带selection的笛卡尔积(如两个表中有相同的schema,则不对其做笛卡尔积)
Natural Join Example
θ-Join Example
- 我们有一个航班表,里面记录了Flight Number, Origin, Destination, Departure Time和Arrival Time
- 我们让这个表self-join,同时有着下面的条件
- Flight1.Dest = Flight2.Origin ^ Flight1.Arr_Time < Flight2.Dept_Time
- what should we get?
Renaming ρ
- 如果属性或者关系有着相同的名字,重命名一个可能比较方便
- 新的关系R'和R有着相同的实例,但是它的schema有着属性N'i,而不是Ni
- 如果我们需要做一个笛卡尔积或者self-join的时候,是很有必要的
Division
假设A有两个属性x和y
假设B有一个属性y
A/B包含了所有的x元组,使得对于每一个B中的y元组,有一个xy元组在A中
- 在课程表中查找所有修完所有课程的学生的学生证(sid)
- 查找参加CSE提供的所有课程的学生的学生证(sid)
Outer Join
- Join操作的一种延申,可以防止信息的损失
- 计算Join,然后将一个关系中的与另一个关系中的元组不匹配的元组添加到连接的结果中。
Example
- Join只返回匹配的(或" good ")元组
- L-260贷款没有借款人的事实在结果中不明确
- Hayes借了一笔不存在的贷款L-155也未被发现
更多推荐
所有评论(0)