自学内容网 自学内容网

关系运算(3)

关系代数

昨天讲完附加关系代数运算,今天讲扩展关系代数运算。

扩展代数运算

正如其名,这种运算定义了前面基本和附加都没有的运算。

去重运算

可以将关系R中跟查询条件相关但是形成了重复的元组去除,只保留查询结果(简洁)

比如查询学生表中的所有系别:

广义投影运算Π

它与前面提到的投影运算区别在于:前者可以对要选取的属性列进行运算或者字符串函数,而后者不行。

比如在学生表中并没有学生出生年份这一属性,但是我们可以通过2021-Sage通过广义投影来实现:

(1)算术运算

查询所有学生的学号、姓名、出生年份

结果会是:

(2)字符串函数

假设现在有一个员工表Employees,并且查询员工ID和员工姓名并且要求姓名都是大写:

ΠEmployeeID, UPPER(FullName)(Employees)

结果将是:

EmployeeID

FullNameInUpperCase

E001

ALICE WONDERLAND

E002

BOB BUILDER

E003

CAOL DREAMER

其中UPPER就是一个字符串函数

聚集运算

其中Fi是聚集函数,常用的聚集函数包含count、sum、avg、min、max等,分别是计算所查属性列下满足条件的元组数量(元素数量)、对属性列下的分量数值进行求和、对属性列下的分量数值进行求和进行求平均值、查找该属性列下数值的最小值、查找该属性列下数值的最大值。

以count、avg为例:

(1)查询学生总人数:

查询结果会返回5.

(2)查询学生总人数、以及学生平均年龄

查询结果:

分组运算

(1)比如查询各个系的男生和女生人数:

结果:

会看到系别只剩下四个元组,性别也是四个,这是由于该运算会去除重复的部分,即

这个符号前的属性列只会保留必要的属性值,而符号后的跟聚焦运算一样

(2)查询所有选课学生的学号及平均分:

结果:

根据上面的,Sno在运算符号前所以成绩表中的Sno属性列中的学号每一个只计算一次。

排序运算

将学生表按照年龄排序,对于年龄相同的元组按照学号排序

对于A1列取值相同的元组按照A2的值进行排序,以此类推。

关系代数运算表达式总结

来试试几道例题:

(1)查询选修了1号课程的学生学号、姓名及成绩

该表达式会先进行自然连接,后是查询,再是投影运算

注:SC是学生选课表,Student是学生表

(2)查询选修了1号课程的学生学号、姓名及成绩

可以有两种表示:

但是下面的会比上面的更加高效,因为在进行自然连接之前先通过查询减少了参与连接的元组数。

关系演算

我们在关系运算(1)中说过关系演算和SQL一样都属于非过程式的查询语言。只描述要查询的数据,而不描述如何查询的过程

元组关系演算

(1)查询年龄≥18的学生的学号、姓名、性别、年龄、所在系

其中t是指我要的查询结果是元组,即元组变量

结果:

(2)查询年龄≥18的学生的学号:

语句含义:

查询结果:

域关系演算

(1)查询年龄大于等于18的学生的学号、姓名、性别、年龄、所在系。

  1. 查询年龄大于等于18的学生的学号:

在|前面的是域变量,相当于前面元组关系演算关系那样。


原文地址:https://blog.csdn.net/lin_miao_2023/article/details/142864257

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!