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

openGauss 关系代数与SQL的转换

openGauss小助手 2021-10-30
743
SQL允许用户在上层数据结构工作,不需要了解底层实现及数据存放方式。另外,SQL语句允许一条SQL语句的输出作为另一条语句的输入,这赋予它很大的灵活性和强大的功能。不过需要注意的是,在关系代数集合中,每一个元组都是唯一确定的,不允许出现重复情况。因此,在计算一个关系代数表达式时,必须对查询结果进行去重工作。
下边列出几个关系代数操作转换为SQL语句的等价形式。为方便后续对SQL扩展语句的介绍,图3-2列出几个简单的关系表。
xy
a3
c2xyyz
b5a335
a1b226
Relation1(b) Relation2(c) Relation3
图3-2 SQL操作关系表示例
1. 选择运算
选择运算SQL语句如下:
SELECT *FROM(R) WHERE condition
SQL常用的查询条件有:比较运算符>、>=、<、<=、=、<>(或!=);范围查询BETWEEN...AND;集合查询IN;空值查询IS NULL;字符串匹配查询LIKE;逻辑查询AND、OR、NOT。可利用上述条件进行扩展查询。
表3-21为选择运算示例。
表3-21 示例:SELECT * FROM Relation1 WHERE y > 2
xy
a3
b5

2. 投影运算
投影运算SQL语句如下:
SELECT A FROM R
3. 关系并运算
RS
关系并运算SQL语句如下:
SELECT * FROM R UNION SELECT * FROM S
SQL语句中,Union操作符对应的常用语句有:UNION运算用于去掉重复的元素,UNION ALL运算不去重。其示例如表3-22和表3-23所示。
表3-22 示例:SELECT * FROM Relation1 UNION ALL SELECT * FROM Relation2
xy
a3
c2
b5
a3
d2
表3-23 示例:SELECT * FROM Relation1 UNION SELECT * FROM Relation2
xy
a3
c2
b5
d2
4. 关系交运算
RS
关系交运算SQL语句如下:
SELECT * FROM R INTERSECT SELECT * FROM S
SQL语句中INTERSECT跟UNION类似,同样存在INTERSECT ALL运算。INTERSECT用于剔除重复行,INTERSECT ALL运算不去重。
5. 关系差运算
R-S
关系差运算SQL语句如下:
SELECT * FROM R EXCEPT SELECT * FROM S
6. 连接运算
连接运算SQL语句如下:
SELECT * FROM R NATURAL JOIN S
SQL连接操作符包括连接类型跟连接条件两部分。
连接类型分为:内连接(INNER JOIN)和外连接(OUTER JOIN),内连接对应等值连接(EQUIJOIN),外连接分别对应左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)及完全外连接(FULL OUTER JOIN)等。此外,还存在半连接(SEMI JOIN)及反连接(ANTI JOIN)。
连接条件决定了哪些元组应该被匹配,决定了连接结果中出现哪些属性。连接条件放在连接类型右边,常用的连接条件有NATURAL、ON、USING(A1,A2…)。其示例如表3-24所示。
表3-24 示例:SELECT Relation1.x Relation3.z AS z FROM Relation1 FULL JOIN Relation3 ON Relation1.y = Relation3.y
xz
a3
c2
bNULL
aNULL
注:预期用Relation1中x列的值和Relation3中z列的值组成一个新的关系表。Relation3中的z属性列在表中名称为z,满足Relation1.y = Relation3.y条件的部分数据将填充在z属性列中。
7. 笛卡儿积运算
RS
笛卡儿运算SQL语句如下:
SELECT * FROM R, S
8. 重命名运算
重命名运算SQL语句如下:
SELECT * FROM S AS R(A1,A2,…)
9. 聚集操作
聚集运算SQL语句如下:
SELECT FROM E GROUP BY
SQL聚集操作示例如表3-25所示。另外可以使用HAVING子句,删除不满足HAVING条件的部分数据。
表3-25 示例:SELECT x, sum(y) FROM Relation1 GROUP BY x 
xsum
a4
c2
b5
注:新表属性由Relation1中x列的值与sum(y)共同组成,Relation1表x列存在两个完全相同的元素a,其y列sum和为4,新生成元组与其他数据生成一个新的关系表。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论