4.关系代数

介绍

  • Query languages(QL):QL 用来从数据库中检索数据
  • Relational model 关系模型支撑简单强大的QL
    • 基于逻辑的形式基础
    • 允许进行很多优化
  • Query language != programming languages
    • QL 不是一门编程语言,不是为了做复杂的运算而设计,而是提供了访问数据集高效简洁的方法
  • 两种数学语言构成了 SQL 的基础
    • 关系代数:过程化语言,对于表示查询的执行计划非常有用
    • 关系演算:让用户描述他们想要什么,而不是如何计算它(声明式语言)

基本操作

  • Projection(投影,p):在 relation 中删除不需要的列
  • Selection(选择,s):从 relation 中选择行的子集
  • Set-difference(差集,-):选取两个 relation 的差集
  • Union(并,U):选取两个 relation 的并集
  • Cross-product( X ):两个集合的笛卡尔乘积
  • Rename( p ):允许我们重命名关系和/或其属性
  • 附加操作
    • Intersection 交集
    • Join 连接
    • Division 除法:非必要但好用
投影

image

  • 把 R 中没有出现在列表 L 里的属性删除
  • 运算结果的 scheme 完全包含投影列表 L 中的字段,其名称与在 R 中的名称相同
  • 会对得到的结果进行消重
  • image
选择
  • 选择满足选择条件的行(记录/元组)c,行变列不变
  • c 的条件拥有这样的形式:Term Op Term
    • Term 表示一个属性名字或者常数
    • OP 可以是 <、> 、=、≠ ......
  • 用逻辑运算符连接多个条件
    • (C1 Λ C2), (C1 V C2), (¬ C1) 也是(复合)条件。
  • 例子
    • image
    • 结果是原来数据集的子集,所以不可能存在重复记录
  • 运算的嵌套
    • image
集合运算
  • Union,Intersection,Set-Difference
  • 这三个运算接收的两个 relation 必须是可求并的
    • 属性的数量一样
    • 对应的属性拥有相同类型
  • 输出是单个关系(不包含重复项)
    • image
    • image
    • image
笛卡尔乘积
  • 将一个表的每一行与另一个表的每一行合并
  • Can_fly × Plane
    • image
    • image
连接

image

  • 产生所有可能的连接并不实用
  • 关联相同指代的记录才有意义。例如航班表中 CA101 的起飞信息和设备表中 CA101 的型号信息
  • Join 是一个附带 selection 的笛卡尔积
    • image
  • 用 Join 或者image都可以
  • 连接的方式
    • Theta-join:条件可以是任意的逻辑表达式
    • Equi-join:条件均为等式
    • 自然连接 Natural joi(也叫等值连接)n:连接具有在两表中相同属性具有相同值的记录
  • equi-join 和 natural-join 这两种 join 会去掉重复的列
θ连接例子
  • 我们使用条件将该表与其自身相连(自连接):Flight1.Dest =Flight2.Origin ^ Flight1.Arr_Time < Flight2.Dept_Time
  • image
  • image
自然连接例子
  • image
  • 百度百科例子:
    • image
    • image
    • image
重命名 ρ

image

  • R'代替 R,image,只是名字变,内容不变
    • 例如:r ( Staff ( Name -> Family_Name, Salary -> Gross_salary ), Employee )
  • 当累乘同一个表格的时候,会出现相同的属性名,这时候就需要这个重命名操作
  • image
Division

假设 A 有两个属性 x、y,B 有一个属性 y

  • A / B 包含的元组满足:对于 B 中的每个 y 元组,A 中都有一个 xy 元组
    • image
    • image
  • 例子:找出 SAI 学院中选了所有课程的学生 ID
    • image
附加:外连接
  • 一种防止信息丢失的 join,保留在连接中没有匹配上的记录
    • image

    • image
  • 只返回匹配到的记录,遗失掉一些记录
    • 贷款 L-260 没有借款人这一事实在结果中并不明确
    • Hayes借了一笔不存在的贷款L-155也未被发现
  • 左外连接
    • image
    • 保留左边 relation 中未匹配的记录 ,并用 null 表示未匹配属性的值
    • image
  • 右外连接
    • 保留左边 relation 中未匹配的记录 ,并用 null 表示未匹配属性的值
    • image
  • 全外连接
    • 保留左右两边relation中未匹配的纪录,并用null表示未匹配属性的值。
    • image
posted @ 2024-12-09 18:31  韦飞  阅读(23)  评论(0)    收藏  举报