数据库原理 第二章_第1页
数据库原理 第二章_第2页
数据库原理 第二章_第3页
数据库原理 第二章_第4页
数据库原理 第二章_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2.4关系代数的扩展运算2.4.1广义投影2.4.2聚集函数2.4.3外连接广义投影广义投影对投影运算的扩展——在属性列表中,允许使用表达式构造新属性两种投影的对比一般投影运算

A1,A2,…,An(E)A1

,A2,…,An是E(关系或关系代数表达式)的属性。

例如:姓名,期末成绩,平时成绩

(Student)广义投影运算

F1,F2,…,Fn(E)其中F1

,F2,…,Fn可以是E的属性,也可以是用表达式构造的新属性(可以用as进行命名,否则无属性名)。

例如:姓名,期末成绩*0.7+平时成绩*0.3(Student)广义投影应用示例关系E:职工的基本情况表。问:每个职工应缴纳的所得税(工资的5%)

TAX(姓名,所得税)(姓名,工资*0.05(E))职工号姓名工资1小张20002小李30003小陈24004小刘3200E姓名?小张100小李150小陈120小刘160

TAX(姓名,所得税)

姓名所得税小张100小李150小陈120小刘160

姓名,工资*0.05TAX外连接外连接(OuterJoin)外连接是对自然连接运算的扩展。为什么要扩展自然连接?——因为自然连接可能会造成信息丢失外连接自然连接的信息丢失问题的示例关系T:教师基本情况表;关系C:授课表。问:所有教师的信息,包括姓名、工号、年龄、所授课程T

C?

教工号姓名年龄1老张352老李403老陈50T教工号课程1数据库2人工智能2软件工程1算法分析C外连接自然连接的信息丢失问题的示例关系T:教师基本情况表;关系C:授课表。问:所有教师的信息,包括姓名、工号、年龄、所授课程T

C?

教工号姓名年龄1老张352老李403老陈50T教工号课程1数据库2人工智能2软件工程1算法分析C姓名年龄教工号课程老张351数据库老李402人工智能老李402软件工程老张351算法分析T

C问题:有关老陈的姓名和年龄信息没有显示出来老陈所在的元组失配了外连接外连接(OuterJoin)因为自然连接运算的结果不包括哪些失配的元组,造成信息丢失。所以为避免这种情况,对失配的元组,与一个空元组(所有属性值为Null)连接后,添加到结果关系中去。这就是外连接运算。外连接的三种类型左外连接=自然连接+左侧表的失配元组(与空元组连接)

右外连接=自然连接+右侧表的失配元组(与空元组连接)

全外连接=自然连接+两侧表的失配元组(与空元组连接)外连接如何计算外连接①计算自然连接②添加失配的元组(缺少属性填空值)ABCa1ab3cc5eRBCD2c21a15e4SABCDa1a1c5e4R

SABCDa1a1c5e4b3cNullABCDa1a1c5e4Null2c2R

SABCDa1a1c5e4b3cNullNull2c2R

SR

S外连接应用示例关系T:教师基本情况表;关系C:授课表。问:所有教师的信息,包括姓名、工号、年龄、所授课程T

C

教工号姓名年龄1老张352老李403老陈50T教工号课程1数据库2人工智能2软件工程1算法分析C姓名年龄教工号课程老张351数据库老李402人工智能老李402软件工程老张351算法分析老陈503NullT

C聚集运算聚集函数(aggregatefunctions)输入:一个值的“集合”,例如:

{1,3,1,4,4}

因为相同值可出现多次,这样的“集合”称为多重集(multiset)输出:单一值,如:

sum:求集合中各个值的总和;

count

:求集合中值的个数;

avg:求集合中各个值的平均;

max:求集合中的最大值;

min:求集合中的最小值;

如果希望在计算中忽略集合中重复的值,则应在函数名后面加上-distinct,如count-distinct就表示计算集合中的不同值的个数。聚集运算聚集运算

(AggregationOperation)

G1,G2,...,GnGF1(A1),F2(A2),…,Fm(Am)(E)

先分组:G1,G2,...,Gn是分组属性,对E中的元组1)在G1,G2,...,Gn上值相等的元组,被划分到同一组2)在G1,G2,...,Gn上值不等的元组,被划分到不同组再统计:对每一个分好的组,在属性A1,A2,...,An上计算聚集函数F1,F2,...,Fn的值。聚集运算的输出一个新关系,属性有n+m个:前n个属性来自左下标的分组属性,后m个来自右下标的聚集函数的新属性(无属性名,或用as命名)输入关系被划分后,一个分组统计为结果中的一个元组。所以原来有多少个分组,输出关系就有多少个元组聚集运算运算示范根据分组属性划分组为每个分好的组,在新关系内添加一个元组t:前n个属性值等于该分组在n个分组属性上的值,后m个属性值等于在该分组上统计m个聚集函数的结果部门姓名月份销售额1John22001John32501Tom12001Tom22401Tom32402Peter23002Peter3200R部门姓名??部门,姓名

Gsum(销售额),max(销售额)(R)

聚集运算运算示范根据分组属性划分组为每个分组,在新关系内添加一个元组t:前n个属性值等于该分组在n个分组属性上的值,后m个属性值等于在该分组上统计m个聚集函数的结果部门姓名月份销售额1John22001John32501Tom12001Tom22401Tom32402Peter23002Peter3200R部门姓名??1John450250部门,姓名

Gsum(销售额),max(销售额)(R)

聚集运算运算示范根据分组属性划分组为每个分组,在新关系内添加一个元组t:前n个属性值等于该分组在n个分组属性上的值,后m个属性值等于在该分组上统计m个聚集函数的结果部门姓名月份销售额1John22001John32501Tom12001Tom22401Tom32402Peter23002Peter3200R部门姓名??1John4502501Tom6802402Peter500300部门,姓名

Gsum(销售额),max(销售额)(R)

聚集运算要点如果分组属性为空,聚集运算的结果是什么?部门姓名月份销售额1John22001John32501Tom12001Tom22401Tom32402Peter23002Peter3200R??1630300Gsum(销售额),max(销售额)(R)

聚集运算思考对以上关系,问:每个部门的最大销售额?部门姓名月份销售额1John22001John32501Tom12001Tom22401Tom32402Peter23002Peter3200R部门?12502300部门Gmax(销售额)(R)

一个常犯的错误求成绩最高的学生姓名?姓名成绩张三80李四90王五100score姓名(Gmax(成绩)(R))

×这样的聚集运算的结果关系包含什么属性?一个常犯的错误求成绩最高的学生姓名?姓名成绩张三80李四90王五100score?姓名(姓名Gmax(成绩)(R))

姓名张三李四王五×一个常犯的错误求成绩最高的学生姓名?姓名成绩张三80李四90王五100score×

姓名(成绩

=Gmax(成绩)(R)(Score))一个常犯的错误求成绩最高的学生姓名?

解法:用聚集运算求最高成绩,然后再连接回原来的关系姓名成绩张三80李四90王五100score姓名(

score.成绩

=最高成绩(Score×Gmax(成绩)as最高成绩(R)))最高成绩100√姓名王五2.5空值空值元组的某些属性可以取空值Null空值用于表示两种情况:值未知;或值不存在sexnamesalaryphonenumberMaleSmith200033521444MaleJonesNULL85215678FemaleKate3000NULLemp空值空值参与各种运算空值出现在算术运算中,其结果一定还是null空值出现在比较运算中,结果一定是unknown(未知)空值出现在布尔运算中,被替换为unknown后再计算OR:(unknownortrue)=true

(unknownorfalse)=unknown

(unknownorunknown)=unknownAND:(trueandunknown)=unknown

(falseandunknown)=false

(unknownandunknown)=unknownNOT:(notunknown)=unknown空值空值参与各种运算空值出现在算术运算中,其结果一定还是null空值出现在比较运算中,结果一定是unknown(未知)空值出现在布尔运算中,被替换为unknown后再计算OR:(unknownortrue)=?,

(unknownorfalse)=?

(unknownorunknown)=?AND:(trueandunknown)=?

(falseandunknown)=?

(unknownandunknown)=?NOT:(notunknown)=

?空值空值参与各种运算空值出现在算术运算中,其结果一定还是null空值出现在比较运算中,结果一定是unknown(未知)空值出现在布尔运算中,被替换为unknown后再计算OR:(unknownortrue)=true,

(unknownorfalse)=unknown

(unknownorunknown)=unknownAND:(trueandunknown)=unknown,

(falseandunknown)=false,

(unknownandunknown)=unknownNOT:(notunknown)=unknown空值对于一个表达式,如果最后一步计算得到的结果是unknown,那么就替换为falseExample1:(3>Null)or(5+Null>4)Example2:not(

(Null<>Null)and(5>4))空值关系

emp:name,salary*0.05(emp)name?Smith100JonesNULLKate150sexnamesalaryphonenumberMaleSmith200033521444MaleJonesNULL85215678FemaleKate3000NULLemp空值关系

emp:

salary<3000

(emp)sexnamesalaryphonenumberMaleSmith200033521444MaleJonesNULL85215678FemaleKate3000NULLempsexnamesalaryphonenumberMaleSmith200033521444空值关系

emp:

salary<3000

orsex=‘male’

(emp)sexnamesalaryphonenumberMaleSmith200033521444MaleJonesNULL85215678sexnamesalaryphonenumberMaleSmith200033521444MaleJonesNULL85215678FemaleKate3000NULLemp空值聚集函数忽略空值关系

emp:G

avg(salary)(emp)?2500sexnamesalaryphonenumberMaleSmith200033521444MaleJonesNULL85215678FemaleKate3000NULLemp2.6数据库的修改2.6.1删除2.6.2插入2.6.3更新删除用关系代数表示删除格式:从R中删除一些满足特定条件的元组(用查询E表示),表示为RRE是对存储关系的赋值运算(赋予新值,即存储关系被修改)删除例:R:学生选修课程关系。删除1号学生选修的课程RR

学号=1(R)学号课程成绩1A552B803A903B651C50R学号课程成绩2B803A903B65R插入用关系代数表示插入格式1:插入一个元组r(指定各个属性值),表示为RR∪

{r}格式2:插入多个元组(来自查询E的结果),表示为RR

E插入例:S:学生关系;C课程关系;R:选修关系。新加入一个学生到关系S,学号为4,姓名小周,性别女SS∪{(4,“小周”,“女”)}学号课程号1A2A2BR学号姓名性别1小陈女2小李男3小张男S课程号课程名A数学B物理C英语C插入例:S:学生关系;C课程关系;R:选修关系。新加入一个学生到关系S,学号为4,姓名小周,性别女SS∪{(4,“小周”,“女”)}学号课程号1A2A2BR学号姓名性别1小陈女2小李男3小张男4小周女S课程号课程名A数学B物理C英语C插入添加所有男学生选修英语课的信息到关系RRR∪学号,课程号

(性别=“男”(S)

课程名=“英语”(C))学号课程号1A2A2BR学号姓名性别1小陈女2小李男3小张男4小周女S课程号课程名A数学B物理C英语C插入添加所有男学生选修英语课的信息到关系RRR∪学号,课程号

(性别=“男”(S)

课程名=“英语”(C))学号课程号1A2A2B2C3CR学号姓名性别1小陈女2小李男3小张男4小周女S课程号课程名A数学B物理C英语C更新用关系代数表示全部更新利用广义投影改变全部元组在某些属性上的值,表示为rF1,F2,…,Fn(r)F1,F2,Fn和原来r的属性A1,A2,……An相对应当第i个属性Ai不需要修改时,Fi就是Ai;当Ai需要修改时,Fi就是一个表达式(可能涉及Ai),该表达式给出了Ai的新值更新例:Emp:职工关系。给每位职工上调10%的工资Emp

职工号,

姓名,

工资*1.1

(Emp)职工号姓名工资1小张20002小李30003小陈24004小刘3200Emp职工号姓名工资1小张22002小李33003小陈26404小刘3520Emp更新用关系代数表示部分更新只对部分满足特定条件p的元组进行更新,表示为rF1,F2,…,Fn

(p

(r))∪(r

-p

(r))F1,F2,…,Fn

(p

(r))

:对满足条件p的元组进行更新r

-p

(r)

:对不满足条件p的元组,不进行更新(不变)更新例:Emp:职工关系。给职工小张上调10%的工资Emp

职工号,

姓名,

工资*1.1

(姓名=“小张”

(Emp))∪(r

-姓名=“小张”

(r))

职工号姓名工资1小张20002小李30003小陈24004小刘3200Emp职工号姓名工资1小张22002小李30003小陈24004小刘3200Emp作业:用关系代数表示查询关系代数如何表达查询或修改操作?——使用某个关系代数表达式(由关系与关系运算组成)。用关系代数表达式表示查询时,须指明使用哪些运算,以及运算的次序,以得到最终的查询结果。所以关系代数是过程化的学号姓名性别年龄9913小张男239802小李女229706小陈男22S姓名小张姓名

(年龄=23(S))年龄为23的学生姓名?查询问题查询表示

(关系代数)查询实例关系S:学生CET4:四级成绩CET6:六级成绩姓名六级成绩小张40小何90小陈82小孙70CET6姓名四级成绩小李50小孙80小何95小张70小陈60小刘78CET4班级姓名年龄1班小张231班小李221班小何242班小陈222班小刘222班小孙22S课堂练习查询问题1.通过四级的学生姓名?2.列出每个学生的出生年份?3.四、六级都已通过的学生姓名?4.1班哪些学生没有参加,或没有通过六级?列出姓名姓名六级成绩小张40小何90小陈82小孙70CET6姓名四级成绩小李50小孙80小何95小张70小陈60小刘78CET4班级姓名年龄1班小张231班小李221班小何242班小陈222班小刘222班小孙22S奇数题解答解答1.通过四级的学生姓名?姓名

(成绩>=60

(CET4))姓名六级成绩小张40小何90小陈82小孙70CET6姓名四级成绩小李50小孙80小何95小张70小陈60小刘78CET4班级姓名年龄1班小张231班小李221班小何242班小陈222班小刘222班小孙22S奇数题解答3.四、六级都已通过的学生姓名?姓名

(四级成绩>=60

(CET4))

姓名

(六级成绩>=60

(CET6))姓名六级成绩小张40小何90小陈82小孙70CET6姓名四级成绩小李50小孙80小何95小张70小陈60小刘78CET4班级姓名年龄1班小张231班小李221班小何242班小陈222班小刘222班小孙22S课堂练习查询问题5.哪些同学四级拿优?列出他们的姓名和班级6.可以获“进步奖”(六级成绩比四级成绩多20分以上)的学生名单?7.列出全部学生的姓名和四、六级成绩8.列出和小孙同班的学生的姓名?姓名六级成绩小张40小何90小陈82小孙70CET6姓名四级成绩小李50小孙80小何95小张70小陈60小刘78CET4班级姓名年龄1班小张231班小李221班小何242班小陈222班小刘222班小孙22S奇数题解答5.哪些同学四级拿优?列出他们的姓名和班级?姓名,班级

(S四级成绩>=90(CET4)))姓名,班级

(四级成绩>=90(

SCET4)))姓名六级成绩小张40

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论