暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openGauss 关系操作符

openGauss小助手 2021-10-28
880

关系(一张表)的本质上是元组(表中的每行,即数据库中每条记录)的集合,因此很多关系代数操作符跟集合常用操作非常相似。关系代数最基本的操作符有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
    ToysNamePriceMaterial
    Bear12Rag
    Tiger7Plastic
    Fox7Plastic
    表3-3 关系:Toys2
    ToysNamePriceMaterial
    Rabbit10Rag
    Dog8Plastic
    表3-4 关系:Supplier
    SupplierToysNameDiscount
    JinFuRabbit8
    DingshengDog8
    FunruiBear9

    关系代数基本操作符如表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。其中XY表示属性名,可以是常量、简单函数或者属性(关系中的列)名,也可以用其序号表示。θ代表比较运算符,它可以是>,<,<=,>=,=或<>等基本运算符,同样也可以使用与(&&)、或(||)、非(!)等逻辑运算符进行逻辑运算。表3-6为选择示例。
    表3-6 示例:
    ToysNamePriceMaterial
    Tiger7Plastic
    Fox7Plastic
    注:查询表达式为Price<10,因此只有后两个元素满足条件。

  • 2. 投影(Projection)
    投影操作符用符号π表示,符号π也是个一元操作符(一些只需要一个操作数的运算符)。投影是对关系R的一种垂直切割,从关系R中取出一列或者多列,F可以是一个属性列或者多个属性列组成的元组,取出的内容由F指定,投影返回的结果由F中所有属性组成,公式表达为:

  • 需要注意的是,投影之后不仅取消了原始关系中某些列,而且还可能取消掉一些元组原因是取消某些关系列后可能出现重复行,违反了关系的定义。因此必须检查并去除结果关系中重复的元组。3-7投影示例。
    表3-7 示例:
    Material
    Rag
    Plastic
    注:投影属性列表由Material组成,不包括Toys1中其他属性,但是拥有行Rag和Plastic,去重后得到上述结果。

  • 3. 笛卡儿积(Cartesian product)
    笛卡儿积操作符用符号表示,又称叉积。其表示两个操作关系RS的元组之间所有可能的连接。笛卡儿积运算会将两个原始元组连接生成一个新的元组。另外,同一个关系中不应该存在相同的属性,否则结果关系中会出现相同的属性,违反了关系唯一性定义,计算结果属性唯一。公式定义如下:

  • 表3-8为笛卡儿积示例。
    表3-8 示例:Toys1Supplier
    Toys1.ToysNameToys1.PriceToys1.MaterialSupplier . SupplierSupplier .
    ToysName
    Supplier
    .Discount
    Bear12RagJinFuRabbit8
    Bear12RagDingshengDog8
    Bear12RagFunruiBear9
    Tiger7PlasticJinFuRabbit8
    Tiger7PlasticDingshengDog8
    Tiger7PlasticFunruiBear9
    Fox7PlasticJinFuRabbit8
    Fox7PlasticDingshengDog8
    Fox7PlasticFunruiBear9
    注:Toys1和Supplier的笛卡儿积为两者所有可能排列的组合,因为关系中不应该存在相同的属性,即关系表不可以同属性名,对于相同的属性值ToysName使用其对应的关系和属性名的组合代替。

  • 4. 连接(Join)
    连接运算是从两个关系的笛卡儿积中选取属性间满足一定条件的元组形成一个新的关系。连接操作符是关系代数中很有用的关系操作符,有四种常用的连接,分别为等值连接(equijoins)、自然连接(natural join)、半连接(Semi join)跟反连接(Anti join)。
    连接条件用表示,连接公式定义如下:

  • 表3-9为连接示例。
    表3-9 连接示例:Toys2Supplier
    Toys2.ToysNamePriceMaterialSupplierToys2.ToysNameDiscount
    Dog8PlasticFunruiBear9
    上述连接也称为连接,这个条件为。
    等值连接中为“=”,它是从关系R与关系S的笛卡儿积中选取AB属性值相同的元组。也可以理解为如下关系式:

  • 表3-10为等值连接示例。
    表3-10 等值连接示例:Toys2Supplier
    Toys2.ToysNamePriceMaterialSupplierToys2.ToysNameDiscount
    Dog8PlasticJinFuRabbit8
    Dog8PlasticDingshengDog8
    自然连接操作符用表示,它是一种特殊的等值连接。它要求两个关系中进行比较的分量必须是同名的属性组,并在结果中去除重复的元素。即若RS中具有相同的属性组BURS的全体属性集合,则自然连接可以记作:

  • 表3-11为自然连接示例。
    表3-11 自然连接示例:Toys2Supplier
    PriceMaterialToysNameSupplierDiscount
    10RagRabbitJinFu8
    8PlasticDogDingsheng8

    此外,还存在其他两种连接:半连接Semi join,运算符为⋉和⋊;及反连接Anti join,运算符为▷。半连接类似于自然连接,常用符号⋉和⋊表示,跟自然连接主要的区别是决定需要显示哪些列。反连接,可以用RS来表示,类似于半连接,区别是反连接结果只能是R中有、S中没有的元组,它们的公共属性相同。表3-12为左半连接示例。
    表3-12 左半连接示例:Toys1⋉Supplier
    ToysNamePriceMaterial
    Bear12Rag
    注:Toys1和Supplier的左半连接类似于自然连接,只显示关系Toys1和关系Supplier属性列ToysName相同的组合,属性列只显示关系Toys1所包含的属性ToysName、Price及Material。表3-13为右半连接示例。
    表3-13 右半连接示例:Toys1⋊Supplier
    SupplierToysNameDiscount
    FunruiBear9
    注:Toys1和Supplier的右半连接类似于左半连接,区别为属性列只显示关系Supplier所包含的属性Supplier、ToysName及Discount。表3-14为反连接示例。
    表3-14 反连接示例:Toys1▷Supplier
    ToysNamePriceMaterial
    Tiger7Plastic
    Fox7Plastic
    注:反连接,属性列只显示关系Toys1所包含的属性ToysName、Price及Material,属性值只显示存在于关系Toys1中的且关系Supplier中没有的元组。

  • 5. 除(Division)
    假设存在两个关系RXY)和SY),其中XY为属性组。R中的YS中的Y可以有不同的属性名,但出自相同集合。RS除运算得到新的关系,新关系中的元组是R中满足下列条件的元组在X属性列上的投影:元组在X分量值的像集包含SY上投影的集合,其中 = 。可以理解如下关系式

  • R÷S除运算关系如图3-1所示。


    图3-1
    R÷S除运算示例如表3-15所示。
    表3-15 示例:
    X
    2
    3
    注:除运算元素23X列的像集包含关系SY上投影的集合,而元素1与元素4不满足这个关系,因而不在新的关系列中

  • 6. 关系并操作符(Union)
    关系并操作要求两个关系相互兼容,也可以说是具有相同的属性。RS相互兼容时,并操作定义如下:

  • 结果关系是由关系R与关系S共同组成。在RS没有元组重复的情况下,结果元组数的最大值为RS元组数之和。重复结果需要进行去重。表3-16为关系并操作示例。
    表3-16 示例:Toys1Toys2
    ToysNamePriceMaterial
    Bear12Rag
    Tiger7Plastic
    Fox7Plastic
    Rabbit10Rag
    Dog8Plastic

  • 7. 关系差(Difference)
    关系差是传统运算之一,用符号表示。关系差操作跟关系并操作类似,要求关系兼容。计算结果为属于关系R而不属于关系S的属性元组。公式表示如下:

  • 表3-17为关系差操作示例。
    表3-17 示例:Toys1Toys2
    ToysNamePriceMaterial
    Bear12Rag
    Tiger7Plastic
    Fox7Plastic
    注:关系Toys1与关系Toys2无交集,因而两者关系差为Toys1本身。

  • 8. 关系交操作符(Intersection)
    关系交操作与关系并操作类似,同样需要关系具备相同的属性。其公式表示如下:

  • 关系交操作可以通过关系差运算表示:。表3-18为关系交操作示例。
    表3-18 示例:Toys1Toys2
    ToysNamePriceMaterial
    由于Toys1Toys2共同的元素所以两者相交值

  • 9. 重命名操作符(Rename)
    重命名关系操作符用符号进行表示,常常作为辅助性用途。当需要连接新的关系S时,它又与原始关系组R的属性名完全相同,即使含义不同,也会在连接时造成一定困扰。此时可以通过重命名操作符进行属性名修改。公式表示如下:

  • 表达式含义为,将关系S重命名为关系Q,其对应属性名称修改为y1,y2…等新名称。表3-19为重命名操作示例。
    表3-19 示例:,新表名称为Toys3
    Rabbit10Rag
    Dog8Plastic

  • 10. 聚集操作符(Aggregation)
    聚集操作,通常可以采用以下公式表达:

  • 聚集运算可以参考上述公式,关系R中数据被分为i组,分组属性分别为,为一个属性名。其中为属性分组对应的的关系表达式。划分表规则为:同一组中所有元组在上的值相同;不同组中元素在上的值不同。表3-20为聚集操作示例。
    表3-20 示例:Toys2.ToysName,Material sum(Price) (Toys2Supplier)
    Toys2.ToysNameMaterialsum(Price)
    RabbitRag30
    DogPlastic24
    注:对Toys2×Supplier的关系表做聚集运算,对于属性列Toys2.ToysNameMaterial相同的部分元素求取Price的和,生成一个新的关系表。
最后修改时间:2021-11-01 18:51:32
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论