这篇文章给大家分享的是有关PostgreSQL中关系代数的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。关系代数是一种过程化查询语言.它包括一个运算的集合,这些运算以一个或两个关系为输入,产生一个新的关系作为结果.关系代数是SQL查询语言的数学基础.
关系代数的运算对象”关系”是一张二维表,由行和列组成,通俗地说,一个关系对应一张表.
下面是本文所使用的关系:
单位信息T_DWXX个人信息T_GRXX关系代数的基本运算有:选择
定义:(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)
希望改变结果的名称,可以通过重命名,为一个关系起个新的名称.
如:
DW1001DWBH=’1001′(T_DWXX),把DWBH=’1001’的单位信息重命名为DW1001其他常用运算包括:交∩
定义: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
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中关系代数的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
相关推荐: Oracle中is null和is not null如何优化
这篇文章给大家分享的是有关Oracle中is null和is not null如何优化的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最近工作的时候遇到了比较大的数据查询,自己的sql在数据量小的时候没问题,在数据量达到300W的时候…