美文网首页PostgreSQL
PostgreSQL 源码解读(16)- 查询语句#1(基础:关

PostgreSQL 源码解读(16)- 查询语句#1(基础:关

作者: EthanHe | 来源:发表于2018-08-13 17:39 被阅读17次

    本文简单介绍了数据库系统实现中的数学基础-关系代数,包括关系代数的基本概念以及关系代数的运算如集合运算/投影/选择/连接等.

    一、基本概念

    关系代数是一种过程化查询语言.它包括一个运算的集合,这些运算以一个或两个关系为输入,产生一个新的关系作为结果.关系代数是SQL查询语言的数学基础.
    关系代数的运算对象"关系"是一张二维表,由行和列组成,通俗地说,一个关系对应一张表.
    下面是本文所使用的关系:
    单位信息T_DWXX

    DWMC DWBH DWDZ
    X有限公司 1001 广东省广州市荔湾区
    Y有限公司 1002 北京市海淀区
    Z有限公司 1003 广西南宁市五象区

    个人信息T_GRXX

    DWBH GRBH NL
    1001 901 23
    1002 902 33
    1002 903 43

    二、基本运算

    关系代数的基本运算有:

    名称 符号 读音
    选择(select) σ sigma
    投影(project) π pi
    并(union)
    差(set-difference) -
    笛卡尔积(cartesian-product) ×
    重命名(rename) ρ rou

    选择σ
    定义:σφ(R)
    选择关系R中能够满足给定谓词φ的元组(Tuple),将那些不满足谓词的元组剔除,组成一个新的关系.
    如:
    σDWBH='1001'(T_DWXX),选择单位信息中,单位编号DWBH=1001的单位信息
    σNL>40(T_GRXX),选择个人信息中,年龄NL>40的个人信息

    投影Π
    定义:πa1,...,an(R)
    使用投影关系来过滤出我们想要的属性,投影关系返回一个仅含有这些属性的关系.要注意的是,由于返回的是集合,所以会过滤重复的属性值.
    如:
    πDWMC(T_DWXX),返回单位信息中的单位名称列

    并∪
    定义:πa1,...,an(R)∪πa1,...,an(S)
    把两个关系中的内容合并起来,或者一个关系经过不同的查询,把结果合并在一起。并运算处理的两个关系须具有相同的属性。
    如:
    πDWBH(T_DWXX)∪πDWBH(T_GRXX)

    差-
    定义:πa1,...,an(R) - πa1,...,an(S)
    关系R差运算关系S,剩下R中有但S中没有的元组组成的关系.必须保证-运算在相容的关系之间进行.
    如:
    πDWBH(T_DWXX) - πDWBH(T_GRXX)

    笛卡尔积×
    定义:R × S
    关系的属性却各不相同,对于这种情况不能使用交并差运算,但又希望把两个不相关的关系连接起来,可以通过笛卡儿乘积,用第一个关系R中每一个元组和第二个关系S中的所有元组结合,形成一个新的关系.
    如:
    T_DWXX × T_GRXX,得到T_DWXX和T_GRXX的笛卡尔积,共9行数据

    重命名ρ
    定义:ρnewname(R)
    希望改变结果的名称,可以通过ρ重命名,为一个关系起个新的名称.
    如:
    ρDW1001σDWBH='1001'(T_DWXX),把DWBH='1001'的单位信息重命名为DW1001

    三、其他运算

    其他常用运算包括:

    名称 符号 读音
    赋值
    自然连接
    θ连接 thet
    半连接 ⋉/⋊
    外连接 ⟕/⟖/⟗
    聚集运算 G

    交∩
    定义:R ∩ S
    在R和S两个关系中都存在的元组的新关系。要求R和S两个关系中的元组属性相同。
    如:
    πDWBH(T_DWXX) ∩ πDWBH(T_GRXX)

    赋值←
    定义:R←S
    使用箭头左侧的名字作为右边关系的表示.
    如:
    DW←πDWBH(T_DWXX)

    自然连接⋈
    定义:R ⋈ S
    自然连接将两个表中共同属性值都相同的元组拼接在一起作为一个新的元组,而将剩下不能拼接的部分全部舍弃,得到一个新的关系。
    如:
    T_DWXX ⋈ T_GRXX

    θ连接
    定义:R ⋈θ S
    组合来自两个关系R和S的元组,而组合条件不是简单的共同属性上的相等,需要一种一般形式的连接算子,这就是θ连接.与自然连接不同的是,相同的属性只会出现一次
    如:
    T_DWXX ⋈DWBH > GRBH T_GRXX,单位编号DWBH大于个人编号GRBH的单位信息和个人信息的元组组合

    半连接⋉/⋊
    定义: R ⋉ S / R ⋊ S
    与S/R在共同属性上有相等值的所有R/S中的元组
    如:
    T_DWXX ⋉ T_GRXX,与个人信息中DWBH一样的单位信息

    外连接⟕/⟖/⟗
    定义: R ⟕ S / R ⟖ S / R ⟗ S
    左外连接的结果包含R中所有元组,对每个元组,若在S中在统统属性上值相等的元组,则正常连接,否则保留R中的此元组,并将S中对应的其他列设为NULL.右外连接/全外连接类似.
    如:
    T_DWXX ⟕ T_GRXX,所有的单位信息,在个人信息不存在的单位,个人信息列值设置为NULL

    聚集运算G
    定义:Exp1,Exp2...Gfunc1,func2,...(R)
    最大值/最小值/平均值/汇总/计数等.其中表达式Exp1...可选,G=MAX/MIN等
    如:
    DWMCGmax(DWBH)(T_DWXX),单位编号最大的单位名称

    四、关系代数与SQL

    SQL语句的运算表达式可以使用关系代数运算表示:
    例一
    -- SQL
    SELECT c1,c2,...
    FROM r1,r2,...
    WHERE P
    -- 关系代数
    πc1,c2,...P(r1 × r2 × ...))

    例二
    -- SQL
    SELECT c1,c2,...,max(c1)
    FROM r1,r2,...
    WHERE P
    GROUP BY c1,c2,...
    -- 关系代数
    c1,c2,...Gmax(c1)c1,c2,...P(r1 × r2 × ...)))

    五、小结

    1、概念:粗略介绍了关系代数的相关基本概念;
    2、运算:大体介绍了基本运算以及连接等其他运算;
    3、SQL:查询语句的表示、重写优化等均需要使用关系代数的相关知识。

    六、参考

    维基百科
    《数据库系统概念》

    相关文章

      网友评论

        本文标题:PostgreSQL 源码解读(16)- 查询语句#1(基础:关

        本文链接:https://www.haomeiwen.com/subject/vhbybftx.html