Chapter6 Formal Relational Query Languages
原创大约 7 分钟
分类
关系代数(Relational Algebra)、元组关系演算(Tuple Relational Calculus)和域关系演算(Domain Relational Calculus)是用于关系数据库的不同查询语言和形式。它们的主要区别如下:
关系代数(Relational Algebra):
关系代数是一种基于集合论的查询语言,用于操作关系数据库中的关系。它使用一组操作符,如选择(selection)、投影(projection)、连接(join)、并(union)、差(difference)等来执行关系操作。关系代数提供了一种形式化的方法来描述和操作关系数据库中的关系。元组关系演算(Tuple Relational Calculus):
元组关系演算是一种基于逻辑的查询语言,用于描述关系数据库中的查询。它使用逻辑谓词(predicate)来描述所需的元组集合。元组关系演算的查询结果是满足指定谓词的关系中的元组集合。元组关系演算描述了所需的结果,而不是如何计算结果。域关系演算(Domain Relational Calculus):
域关系演算也是一种基于逻辑的查询语言,用于描述关系数据库中的查询。它使用逻辑谓词来描述所需的属性集合。域关系演算的查询结果是满足指定谓词的关系中的属性集合。域关系演算描述了所需的属性,而不是如何计算结果。
关系代数( Relational Algebra)
- 过程语言(Procedural language)
- 六个基本运算子:
- 查询(Selection):
- 投影(Projection):
- 集合并(Union):
- 差集(Set difference):
- 笛卡尔积(Cartesian product):
- 重命名(Reanme):
- 查询(Selection):
六个基本运算符号
查询(Select Operation)
- 基本形式:
称为选择谓词,可以由多个独立的命题通过 等符号连接- 被定义为:
- 例如:
投影(Project Operation)
- 基本形式:
- 其中
是属性名称, 是关系名称 - 由于关系是集合,因此从结果中删除了重复行
- 例如:
集合并(Union Operation)
- 基本形式:
- 定义为:
需要满足两个条件:- r, s 必须具有相同的 arity(相同的属性数量)
- 属性域必须兼容(例如:
的第 列与 的第 列处理相同类型的值)
- 例如,查找 2009 年秋季学期或 2010 年春季学期或两者都教授的所有课程:
差集(Set difference)
- 基本形式:
- 定义为:
- 跟集合并一样,必须有一样的属性数量和兼容的属性域
- 例如,查找 2009 年秋季学期教授的所有课程,但 2010 年春季学期不教授的所有课程:
笛卡尔积(Cartesian-Product Operation)
- 基本形式:
- 定义为:
- 假设
和 的属性是不相交的(即, )。 如果 和 的属性相交,则必须使用重命名。
重命名(Rename Operation)
- 基本形式:
或者 表示把关系 重命名为 ,把属性重命名为
其它运算符号
集合交(Set-Intersection Operation)
- 基本形式:
- 定义为:
- 需要
和 有相同的属性数量和匹配的属性域
自然连接(Natural-Join Operation)
- 基本形式:
- 设
和 分别是基于模式 和 的关系。那么, 是基于模式 的关系,其获取方式如下:
考虑每对元组 :- 如果来自
的元组 和来自 的元组 在 的每个属性上具有相同的值,则将一个元组 添加到结果中,- 其中
在 上具有与 相同的值, 在 上具有与 相同的值。
- 其中
- 如果来自
- 在没有公共属性的时候退化为笛卡尔积
- 例如:
Theta 连接(Theta Join)
- 定义为:
- 例如,假设一个顾客要购买一个车模和一个船模,但不想为船花费比车更多的钱。那么可以有
- 当
为等号时,又被称为相等连接
赋值(Assignment Operation)
- 基本形式:
- 用来表示一个临时的关系变量
- 例如:
外连接
- 一种扩展的连接操作,避免了信息的丢失。
- 首先计算连接操作,然后将一方关系中与另一方关系中的元组不匹配的元组添加到连接结果中。
- 使用空值(null):
- 空值表示值是未知的或不存在的。
- 所有涉及空值的比较(粗略地说)根据定义都是 false。
- 我们将在后面详细研究与空值的比较的确切含义。
空值(Null Values)
- 某些属性的元组可能具有空值(null)。
- 空值表示一个未知的值或值不存在。
- 任何涉及空值的算术表达式的结果都是空值。
- 聚合函数简单地忽略空值(与 SQL 中类似)。
- 在去重和分组中,空值被视为任何其他值,并且假设两个空值是相同的(与 SQL 中类似)。
Join 之解析
- 连接主要由连接方向、连接类型组成
- 连接方向包括:左右内外
- 连接类型包括:自然连接、ON 子句和 HAVING 子句
除法(Division Operation)
- 基本形式:
- 定义为:
,这里的 是唯一于 的属性名字的集合 - 如果 DBProject 包含数据库项目的所有任务,那么上述划分的结果恰好包含完成数据库项目中两项任务的学生。
广义投影( Generalized Projection)
- 基本形式:
- 其中
都是关于属性的算数表达式 - 例如:
聚集函数(Aggregate Functions and Operations)
- 基本形式:
是任意关系代数表达式。 是用于分组的属性列表(可以为空)。- 每个
是一个聚合函数。 - 每个
是一个属性名。
- 输出的关系有
个属性
修改(Modification)
- 增加(Insertion):
- 删除(Deletion):
- 更新(Updating):