关系(一张表)的本质上是元组(表中的每行,即数据库中每条记录)的集合,因此很多关系代数操作符跟集合常用操作非常相似。关系代数最基本的操作符有5个:选择(Selection)、投影(Projection)、笛卡儿积(Cartesian product)、关系差(Difference)和重命名(Rename)。事实上这5个基本关系操作符可以满足关系完备性的要求。此外,还有一些附加的关系运算符,如连接(Join)、除(Division)等。这些操作符的功能可以用前面介绍的基础运算符的组合来表示,但是因为这些运算符经常被用到,因而也同样被抽象成一个完整的操作符来使用。下面将对这些关系操作符进行介绍。
为了更加形象的说明各关系操作符的含义,下面罗列了关系表实例,后续的关系操作将基于如下关系表实例展开。表3-2和表3-3为两个玩具的关系清单,表3-4为生产商当天全量产品处理折扣,以下是其中各列的说明:
- Toys Name表示玩具名
- Price表示玩具价格,单位为$
- Material表示材质
- Supplier表示生产商
- Discount表示折扣
表3-2 关系:Toys1
表3-3 关系:Toys2ToysName Price Material Bear 12 Rag Tiger 7 Plastic Fox 7 Plastic
表3-4 关系:SupplierToysName Price Material Rabbit 10 Rag Dog 8 Plastic Supplier ToysName Discount JinFu Rabbit 8 Dingsheng Dog 8 Funrui Bear 9
关系代数基本操作符如表3-5所示,下面逐一介绍各关系操作符的工作原理。
表3-5 关系代数操作符关系操作符类别 运算符 符号 基本关系 选择(Selection) 投影(Projection) 笛卡儿积(Cartesian product) 连接(Join) 除(Division) 关系并操作符(Union) 关系差(Difference) 扩展关系 关系交操作符(Intersection) 重命名操作符(Rename) 聚集操作符(Aggregation)
1. 选择(Selection)
选择操作符在关系代数中通常用符号σ表示,用于在关系R中选择满足给定条件F(t)的元组,公式表达为:
F是一个或多个逻辑表达式的组合。选择运算实际上是从关系R中选择满足选择条件F的元组。当关系R中所有元组均满足选择条件F时,返回值跟关系R完全相同;当关系R中所有元组均不满足选择条件F时,返回结果关系中的元组数为0。
逻辑表达式F的基本形式为XθY。其中X、Y表示属性名,可以是常量、简单函数或者属性(关系中的列)名,也可以用其序号表示。θ代表比较运算符,它可以是>,<,<=,>=,=或<>等基本运算符,同样也可以使用与(&&)、或(||)、非(!)等逻辑运算符进行逻辑运算。表3-6为选择示例。
表3-6 示例:
注:查询表达式为Price<10,因此只有后两个元素满足条件。ToysName Price Material Tiger 7 Plastic Fox 7 Plastic - 2. 投影(Projection)
投影操作符用符号π表示,符号π也是个一元操作符(一些只需要一个操作数的运算符)。投影是对关系R的一种垂直切割,从关系R中取出一列或者多列,F可以是一个属性列或者多个属性列组成的元组,取出的内容由F指定,投影返回的结果由F中所有属性组成,公式表达为:

- 需要注意的是,投影之后不仅取消了原始关系中某些列,而且还可能取消掉一些元组,原因是取消某些关系列后可能出现重复行,违反了关系的定义。因此必须检查并去除结果关系中重复的元组。表3-7为投影示例。
表3-7 示例:
注:投影属性列表由Material组成,不包括Toys1中其他属性,但是拥有行Rag和Plastic,去重后得到上述结果。Material Rag Plastic - 3. 笛卡儿积(Cartesian product)
笛卡儿积操作符用符号表示,又称叉积。其表示两个操作关系R和S的元组之间所有可能的连接。笛卡儿积运算会将两个原始元组连接生成一个新的元组。另外,同一个关系中不应该存在相同的属性,否则结果关系中会出现相同的属性,违反了关系唯一性定义,计算结果属性唯一。公式定义如下:
- 表3-8为笛卡儿积示例。
表3-8 示例:Toys1Supplier
注:Toys1和Supplier的笛卡儿积为两者所有可能排列的组合,因为关系中不应该存在相同的属性,即关系表不可以同属性名,对于相同的属性值ToysName使用其对应的关系和属性名的组合代替。Toys1.ToysName Toys1.Price Toys1.Material Supplier . Supplier Supplier .
ToysNameSupplier
.DiscountBear 12 Rag JinFu Rabbit 8 Bear 12 Rag Dingsheng Dog 8 Bear 12 Rag Funrui Bear 9 Tiger 7 Plastic JinFu Rabbit 8 Tiger 7 Plastic Dingsheng Dog 8 Tiger 7 Plastic Funrui Bear 9 Fox 7 Plastic JinFu Rabbit 8 Fox 7 Plastic Dingsheng Dog 8 Fox 7 Plastic Funrui Bear 9 - 4. 连接(Join)
连接运算是从两个关系的笛卡儿积中选取属性间满足一定条件的元组形成一个新的关系。连接操作符是关系代数中很有用的关系操作符,有四种常用的连接,分别为等值连接(equijoins)、自然连接(natural join)、半连接(Semi join)跟反连接(Anti join)。
连接条件用表示,连接公式定义如下: 
表3-9为连接示例。
表3-9 连接示例:Toys2Supplier
上述连接也称为连接,这个条件为。Toys2.ToysName Price Material Supplier Toys2.ToysName Discount Dog 8 Plastic Funrui Bear 9
等值连接中为“=”,它是从关系R与关系S的笛卡儿积中选取A、B属性值相同的元组。也可以理解为如下关系式:
表3-10为等值连接示例。
表3-10 等值连接示例:Toys2Supplier
自然连接操作符用表示,它是一种特殊的等值连接。它要求两个关系中进行比较的分量必须是同名的属性组,并在结果中去除重复的元素。即若R与S中具有相同的属性组B,U为R跟S的全体属性集合,则自然连接可以记作:Toys2.ToysName Price Material Supplier Toys2.ToysName Discount Dog 8 Plastic JinFu Rabbit 8 Dog 8 Plastic Dingsheng Dog 8 
表3-11为自然连接示例。
表3-11 自然连接示例:Toys2SupplierPrice Material ToysName Supplier Discount 10 Rag Rabbit JinFu 8 8 Plastic Dog Dingsheng 8
此外,还存在其他两种连接:半连接Semi join,运算符为⋉和⋊;及反连接Anti join,运算符为▷。半连接类似于自然连接,常用符号⋉和⋊表示,跟自然连接主要的区别是决定需要显示哪些列。反连接,可以用R▷S来表示,类似于半连接,区别是反连接结果只能是R中有、S中没有的元组,它们的公共属性相同。表3-12为左半连接示例。
表3-12 左半连接示例:Toys1⋉Supplier
注:Toys1和Supplier的左半连接类似于自然连接,只显示关系Toys1和关系Supplier属性列ToysName相同的组合,属性列只显示关系Toys1所包含的属性ToysName、Price及Material。表3-13为右半连接示例。ToysName Price Material Bear 12 Rag
表3-13 右半连接示例:Toys1⋊Supplier
注:Toys1和Supplier的右半连接类似于左半连接,区别为属性列只显示关系Supplier所包含的属性Supplier、ToysName及Discount。表3-14为反连接示例。Supplier ToysName Discount Funrui Bear 9
表3-14 反连接示例:Toys1▷Supplier
注:反连接,属性列只显示关系Toys1所包含的属性ToysName、Price及Material,属性值只显示存在于关系Toys1中的且关系Supplier中没有的元组。ToysName Price Material Tiger 7 Plastic Fox 7 Plastic - 5. 除(Division)
假设存在两个关系R(X,Y)和S(Y),其中X,Y为属性组。R中的Y与S中的Y可以有不同的属性名,但出自相同集合。R与S除运算得到新的关系,新关系中的元组是R中满足下列条件的元组在X属性列上的投影:元组在X分量值ⅹ的像集包含S在Y上投影的集合,其中ⅹ = 。可以理解为如下关系式:

- R÷S除运算关系如图3-1所示。
图3-1
R÷S除运算示例如表3-15所示。
表3-15 示例:
注:除运算,元素2与3在X列的像集包含关系S在Y列上投影的集合,而元素1与元素4不满足这个关系,因而不在新的关系列中。X 2 3 - 6. 关系并操作符(Union)
关系并操作要求两个关系相互兼容,也可以说是具有相同的属性。R跟S相互兼容时,并操作定义如下: 
结果关系是由关系R与关系S共同组成。在R跟S没有元组重复的情况下,结果元组数的最大值为R与S元组数之和。重复结果需要进行去重。表3-16为关系并操作示例。
表3-16 示例:Toys1Toys2ToysName Price Material Bear 12 Rag Tiger 7 Plastic Fox 7 Plastic Rabbit 10 Rag Dog 8 Plastic - 7. 关系差(Difference)
关系差是传统运算之一,用符号表示。关系差操作跟关系并操作类似,要求关系兼容。计算结果为属于关系R而不属于关系S的属性元组。公式表示如下: 
表3-17为关系差操作示例。
表3-17 示例:Toys1Toys2
注:关系Toys1与关系Toys2无交集,因而两者关系差为Toys1本身。ToysName Price Material Bear 12 Rag Tiger 7 Plastic Fox 7 Plastic - 8. 关系交操作符(Intersection)
关系交操作与关系并操作类似,同样需要关系具备相同的属性。其公式表示如下: 
关系交操作可以通过关系差运算表示:
。表3-18为关系交操作示例。
表3-18 示例:Toys1Toys2
注:由于Toys1跟Toys2无共同的元素,所以两者相交值为空。ToysName Price Material - 9. 重命名操作符(Rename)
重命名关系操作符用符号进行表示,常常作为辅助性用途。当需要连接新的关系S时,它又与原始关系组R的属性名完全相同,即使含义不同,也会在连接时造成一定困扰。此时可以通过重命名操作符进行属性名修改。公式表示如下: 
表达式含义为,将关系S重命名为关系Q,其对应属性名称修改为y1,y2…等新名称。表3-19为重命名操作示例。
表3-19 示例:,新表名称为Toys3Rabbit 10 Rag Dog 8 Plastic - 10. 聚集操作符(Aggregation)
聚集操作,通常可以采用以下公式表达: 
聚集运算可以参考上述公式,关系R中数据被分为i组,分组属性分别为,为一个属性名。其中为属性分组对应的的关系表达式。划分表规则为:同一组中所有元组在上的值相同;不同组中元素在上的值不同。表3-20为聚集操作示例。
表3-20 示例:Toys2.ToysName,Material sum(Price) (Toys2Supplier)
注:对Toys2×Supplier的关系表做聚集运算,对于属性列Toys2.ToysName、Material相同的部分元素求取Price的和,生成一个新的关系表。Toys2.ToysName Material sum(Price) Rabbit Rag 30 Dog Plastic 24
最后修改时间:2021-11-01 18:51:32
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




