【数据库之关系代数】

打印 上一主题 下一主题

主题 855|帖子 855|积分 2565

关系代数(Relational Algebra)是关系型数据库理论的基础之一,它提供了一组操作,用于从一个或多个关系(即数据库中的表)中提取和处置惩罚数据。这些操作本质上是一种查询语言,通过对关系的操作生成新的关系,类似于 SQL 中的查询语句。关系代数的每个操作都是针对关系的,操作的效果也是一个关系。
关系代数可以用于表达查询的逻辑运算,是查询执行的理论基础。它使用数学符号和规则来描述数据查询的操作,并且通过这些操作可以组合成更复杂的查询。
1. 关系代数的基本概念

1.1 关系(Relation)

在关系代数中,关系就是表,表由多少个元组(即行)组成,表中的列称为属性。一个关系可以看作一个集合,其中每个元素是一个元组。
1.2 属性(Attribute)

属性是关系中的列,描述了元组中的一个数据点。比方,关系 “学生” 中可能有属性 “学号”、“姓名”、“班级”。
1.3 元组(Tuple)

元组是关系中的一行数据,每个元组由多少个属性的值组成。每个元组的值是不同的属性的详细数据点。

2. 关系代数的基本操作

关系代数中的操作可以分为两类:基本操作派生操作。基本操作包括选择投影笛卡尔积重命名,派生操作包括自然毗连左外毗连等。基本操作是其他操作的基础,任何复杂的查询都可以由基本操作组合而成。
2.1 选择(Selection, σ)

选择操作用于从关系中选取符合某些条件的元组,即按行选择。选择操作的效果是原关系的一个子集。


  • 语法:                                                   σ                               条件                                      (                            R                            )                                  \sigma_{条件}(R)                     σ条件​(R)
  • 寄义:从关系                                         R                                  R                     R 中选择满意某个条件的元组。
示例:

假设有一个关系 学生(Student),属性为 学号、姓名、班级。
学号姓名班级101张三一班102李四二班103王五一班 选择班级为“一班”的学生:


  •                                                    σ                               班级 = ’一班’                                      (                            学生                            )                                  \sigma_{\text{班级 = '一班'}}(学生)                     σ班级 = ’一班’​(学生)
效果为:
学号姓名班级101张三一班103王五一班 2.2 投影(Projection, π)

投影操作用于从关系中选择特定的属性,即按列选择。投影操作会删除不需要的列,并去除效果中的重复元组。


  • 语法:                                                   π                               属性列表                                      (                            R                            )                                  \pi_{\text{属性列表}}(R)                     π属性列表​(R)
  • 寄义:从关系                                         R                                  R                     R 中选择指定的列(属性)。
示例:

在 学生(Student) 关系中,投影出学生的学号和姓名:


  •                                                    π                               学号, 姓名                                      (                            学生                            )                                  \pi_{\text{学号, 姓名}}(\text{学生})                     π学号, 姓名​(学生)
效果为:
学号姓名101张三102李四103王五 2.3 并(Union, ∪)

并操作用于将两个关系中的全部元组归并,去掉重复的元组。要求两个关系的属性必须类似。


  • 语法:                                                   R                               1                                      ∪                                       R                               2                                            R_1 \cup R_2                     R1​∪R2​
  • 寄义:返回关系                                                    R                               1                                            R_1                     R1​ 和                                                    R                               2                                            R_2                     R2​ 的并集,包罗                                                    R                               1                                            R_1                     R1​ 和                                                    R                               2                                            R_2                     R2​ 中全部的元组,重复元组只保存一个。
示例:

假设有两个关系:
关系A:
学号姓名101张三102李四 关系B:
学号姓名102李四103王五 执行并操作:


  •                                         A                            ∪                            B                                  A \cup B                     A∪B
效果为:
学号姓名101张三102李四103王五 2.4 差(Difference, −)

差操作用于返回属于第一个关系但不属于第二个关系的元组。


  • 语法:                                                   R                               1                                      −                                       R                               2                                            R_1 - R_2                     R1​−R2​
  • 寄义:返回属于                                                    R                               1                                            R_1                     R1​ 而不属于                                                    R                               2                                            R_2                     R2​ 的元组。
示例:

对于上面的关系A和关系B,执行差操作:


  •                                         A                            −                            B                                  A - B                     A−B
效果为:
学号姓名101张三 2.5 笛卡尔积(Cartesian Product, ×)

笛卡尔积用于将两个关系中的每个元组归并,生成一个包罗全部可能组合的新关系。


  • 语法:                                                   R                               1                                      ×                                       R                               2                                            R_1 \times R_2                     R1​×R2​
  • 寄义:返回                                                    R                               1                                            R_1                     R1​ 和                                                    R                               2                                            R_2                     R2​ 的笛卡尔积,每个元组是                                                    R                               1                                            R_1                     R1​ 的一个元组与                                                    R                               2                                            R_2                     R2​ 的一个元组的组合。
示例:

假设有两个关系:
关系A:
学号姓名101张三 关系B:
课程ID课程名201数学202英语 执行笛卡尔积:


  •                                         A                            ×                            B                                  A \times B                     A×B
效果为:
学号姓名课程ID课程名101张三201数学101张三202英语 2.6 重命名(Rename, ρ)

重命名操作用于为关系或其属性赋予新的名字,以方便理解或解决关系代数表达式中的属性名辩说标题。


  • 语法:                                                   ρ                               新名                                      (                            R                            )                                  \rho_{新名}(R)                     ρ新名​(R)
  • 寄义:将关系                                         R                                  R                     R 重命名为                                         新名                                  新名                     新名。
示例:

假设有一个关系 学生(Student):


  •                                                    ρ                               S                                      (                            S                            t                            u                            d                            e                            n                            t                            )                                  \rho_{S}(Student)                     ρS​(Student)
将 Student 关系重命名为 S。

3. 关系代数的派生操作

派生操作是基于基本操作构建的更复杂的操作,用于表达更复杂的查询逻辑。
3.1 交(Intersection, ∩)

交操作返回两个关系的交集,包罗两个关系共有的元组。


  • 语法:                                                   R                               1                                      ∩                                       R                               2                                            R_1 \cap R_2                     R1​∩R2​
  • 寄义:返回同时属于                                                    R                               1                                            R_1                     R1​ 和                                                    R                               2                                            R_2                     R2​ 的元组。
3.2 自然毗连(Natural Join, ⨝)

自然毗连是笛卡尔积的一个变体,它联合了选择和笛卡尔积,要求只有类似属性的元组才被毗连。


  • 语法:                                                   R                               1                                      ⋈                                       R                               2                                            R_1 \bowtie R_2                     R1​⋈R2​
  • 寄义:根据两个关系中具有类似属性值的列进行毗连,去掉重复的列。
示例:

假设有两个关系:
学生表:
学号姓名101张三102李四 选课表:
学号课程101数学102英语 自然毗连操作:


  •                                         学生                            ⋈                            选课                                  学生 \bowtie 选课                     学生⋈选课
效果为:
学号姓名课程101张三数学102李四英语 3.3 外毗连(Outer Join)

外毗连是自然毗连的扩展。它包括左外毗连(Left Outer Join)、右外毗连(Right Outer Join)和全外毗连(Full Outer Join),外毗连保存了不匹配的元组。


  • 左外毗连(Left Outer Join):保存左表的全部元组,纵然右表中没有匹配的元组。
  • 右外毗连(Right Outer Join):保存右表的全部元组,纵然左表中没有匹配的元
组。


  • 全外毗连(Full Outer Join):保存左右表的全部元组。

4. 关系代数和 SQL 的关系

关系代数是 SQL 查询语言的理论基础,SQL 的很多操作都可以通过关系代数来描述。比如:


  • SQL中的SELECT 对应关系代数中的 选择(Selection, σ)
  • SQL中的JOIN 对应关系代数中的 自然毗连(Natural Join, ⨝)
通过关系代数,可以用数学的形式表达数据库查询逻辑,资助理解 SQL 语句的执行原理。

总结

关系代数 是关系型数据库理论中的一种操作体系,它使用一组数学操作符对关系(表)进行查询操作。通过选择、投影、并、差、笛卡尔积、重命名等基本操作,关系代数为数据库提供了一个强大的查询工具。复杂的查询可以通过这些基本操作组合实现,理解关系代数对理解 SQL 查询优化和执行至关重要。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

半亩花草

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表