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

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

一、基本概念

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

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

个人信息T_GRXX

DWBHGRBHNL
100190123
100290233
100290343

二、基本运算

关系代数的基本运算有:

名称符号读音
选择(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:查询语句的表示、重写优化等均需要使用关系代数的相关知识。

六、参考

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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/6906/viewspace-2374900/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/6906/viewspace-2374900/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值