这篇文章给大家分享的是有关PostgreSQL中关系代数的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
一、基本概念
关系代数是一种过程化查询语言.它包括一个运算的集合,这些运算以一个或两个关系为输入,产生一个新的关系作为结果.关系代数是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 × …)))
感谢各位的阅读!关于“PostgreSQL中关系代数的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/204969.html