跳至主要內容

Chapter6 Formal Relational Query Languages

Chiichen原创大约 7 分钟课程笔记数据库

分类

关系代数(Relational Algebra)、元组关系演算(Tuple Relational Calculus)和域关系演算(Domain Relational Calculus)是用于关系数据库的不同查询语言和形式。它们的主要区别如下:

  1. 关系代数(Relational Algebra):
    关系代数是一种基于集合论的查询语言,用于操作关系数据库中的关系。它使用一组操作符,如选择(selection)、投影(projection)、连接(join)、并(union)、差(difference)等来执行关系操作。关系代数提供了一种形式化的方法来描述和操作关系数据库中的关系。

  2. 元组关系演算(Tuple Relational Calculus):
    元组关系演算是一种基于逻辑的查询语言,用于描述关系数据库中的查询。它使用逻辑谓词(predicate)来描述所需的元组集合。元组关系演算的查询结果是满足指定谓词的关系中的元组集合。元组关系演算描述了所需的结果,而不是如何计算结果。

  3. 域关系演算(Domain Relational Calculus):
    域关系演算也是一种基于逻辑的查询语言,用于描述关系数据库中的查询。它使用逻辑谓词来描述所需的属性集合。域关系演算的查询结果是满足指定谓词的关系中的属性集合。域关系演算描述了所需的属性,而不是如何计算结果。

关系代数( Relational Algebra)

  • 过程语言(Procedural language)
  • 六个基本运算子:
    • 查询(Selection):σ
    • 投影(Projection):Π
    • 集合并(Union):
    • 差集(Set difference):
    • 笛卡尔积(Cartesian product):×
    • 重命名(Reanme): ρ

六个基本运算符号

查询(Select Operation)

Selction操作
Selction操作
  • 基本形式:σp(R)
  • p称为选择谓词,可以由多个独立的命题通过,等符号连接
  • 被定义为:σp(r)={ttr and p(t)}
  • 例如:σdept_name=Physics"(instructor)

投影(Project Operation)

Project操作
Project操作
  • 基本形式:Πa1,,an(r)
  • 其中a1,,an是属性名称,r是关系名称
  • 由于关系是集合,因此从结果中删除了重复行
  • 例如:ΠID,name,salary(instructor)

集合并(Union Operation)

Union操作
Union操作
  • 基本形式:rs
  • 定义为:rs={ttr or ts}
  • rs需要满足两个条件:
    1. r, s 必须具有相同的 arity(相同的属性数量)
    2. 属性域必须兼容(例如:r的第k列与s的第k列处理相同类型的值)
  • 例如,查找 2009 年秋季学期或 2010 年春季学期或两者都教授的所有课程:Πcourse_id(σ semester=Fall  year=2009(section))Πcourse_id(σ semester=Spring year=2010(section))

差集(Set difference)

Set difference
Set difference
  • 基本形式:rs
  • 定义为:rs={trr and ts}
  • 跟集合并一样,必须有一样的属性数量和兼容的属性域
  • 例如,查找 2009 年秋季学期教授的所有课程,但 2010 年春季学期不教授的所有课程:Πcourse_id(σ semester=Fall  year=2009(section))Πcourse_id(σ semester=Spring year=2010(section))

笛卡尔积(Cartesian-Product Operation)

Cartesian-Product
Cartesian-Product
  • 基本形式:r×s
  • 定义为:r×s={t,qtr and qs}
  • 假设 r(R)s(S) 的属性是不相交的(即,RS=)。 如果 r(R)s(S) 的属性相交,则必须使用重命名。

重命名(Rename Operation)

  • 基本形式:ρx(R)或者ρx(A1,,An)(R)表示把关系R重命名为x,把属性重命名为A1,,An

其它运算符号

集合交(Set-Intersection Operation)

Set-Intersection
Set-Intersection
  • 基本形式:rs
  • 定义为:rs={ttr and ts}
  • 需要rs有相同的属性数量和匹配的属性域

自然连接(Natural-Join Operation)

Natural-Join
Natural-Join
  • 基本形式:rs
  • rs 分别是基于模式 RS 的关系。那么,rs是基于模式 RS 的关系,其获取方式如下:
    考虑每对元组 t
    • 如果来自 r 的元组 tr 和来自 s 的元组 tsRS 的每个属性上具有相同的值,则将一个元组 t 添加到结果中,
      • 其中 tr 上具有与 tr 相同的值,
      • ts 上具有与 ts 相同的值。
  • 在没有公共属性的时候退化为笛卡尔积
  • 例如:
R=(A,B,C,D)S=(E,B,D)Resultschema=(A,B,C,D,E)rs=Πr.A,r.B,r.C,r.D,s.E(σr.B=s.Br.D=s.D(r×s))

Theta 连接(Theta Join)

  • 定义为:rθs=σθ(r×s)
  • 例如,假设一个顾客要购买一个车模和一个船模,但不想为船花费比车更多的钱。那么可以有carCarpriceBoatPriceboat
  • θ为等号时,又被称为相等连接

赋值(Assignment Operation)

  • 基本形式:rp
  • 用来表示一个临时的关系变量
  • 例如:aσP(E)

外连接

  • 一种扩展的连接操作,避免了信息的丢失。
  • 首先计算连接操作,然后将一方关系中与另一方关系中的元组不匹配的元组添加到连接结果中。
  • 使用空值(null):
    • 空值表示值是未知的或不存在的。
    • 所有涉及空值的比较(粗略地说)根据定义都是 false。
    • 我们将在后面详细研究与空值的比较的确切含义。
      Outer Join –Example
      Outer Join –Example2
      Outer Join –Example3

空值(Null Values)

  • 某些属性的元组可能具有空值(null)。
  • 空值表示一个未知的值或值不存在。
    • 任何涉及空值的算术表达式的结果都是空值。
    • 聚合函数简单地忽略空值(与 SQL 中类似)。
    • 在去重和分组中,空值被视为任何其他值,并且假设两个空值是相同的(与 SQL 中类似)。

Join 之解析

  • 连接主要由连接方向、连接类型组成
  • 连接方向包括:左右内外
  • 连接类型包括:自然连接、ON 子句和 HAVING 子句

除法(Division Operation)

  • 基本形式:r÷s
  • 定义为:R÷S={t[a1,,an]tRsS((t[a1,,an]s)R)},这里的[a1,,an]是唯一于R的属性名字的集合
    Division Example
  • 如果 DBProject 包含数据库项目的所有任务,那么上述划分的结果恰好包含完成数据库项目中两项任务的学生。
    Division Example 2

广义投影( Generalized Projection)

  • 基本形式:ΠF1,F2,,Fn(E)
  • 其中F1,F2,,Fn都是关于属性的算数表达式
  • 例如:ΠID,name,dept_name,salary/12(instructor)

聚集函数(Aggregate Functions and Operations)

  • 基本形式:G1,G2,,GnGF1(A1),F2(A2),,Fm(Am)(E)
    • E 是任意关系代数表达式。
    • G1G2Gn 是用于分组的属性列表(可以为空)。
    • 每个Fi是一个聚合函数。
    • 每个Ai是一个属性名。
  • 输出的关系有n+m个属性
    Aggregate Function——Sum

修改(Modification)

  • 增加(Insertion):rrE
  • 删除(Deletion):rrE
  • 更新(Updating):rΠF1,,Fn(r)