关系数据库-关系演算
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.5 关系演算(1) 关系演算是以数理逻辑中的谓词演算为基础的。按谓词 变元的不同,关系演算可分为元组关系演算和域关系演算。 本节我们通过两个实际的关系演算语言来介绍关系演算的思 想。
第二章 关系数据库
1Hale Waihona Puke 1.元组关系演算ALPHA 元组关系演算以元组变量作为谓词变元的基本对象。一 种典型的元组关系演算语言是E.F.Codd提出ALPHA语言,这 一语言虽然没有实际实现,但关系数据库管理系统INGRES 所用的QUEL语言是参照ALPHA语言研制的,与ALPHA十 分类似。 ALPHA语言主要有GET、PUT、HOLD、UPDATE、 DELETE、DROP六条语句。
(4)带定额的检索 例5 取出一个信息系学生的学号 GET W (1) (Student.Sno): Student.Sdept='IS' 所谓带定额的检索是指指定检索出元组的个数,方法是在W 后括号中加上定额数量。
第二章 关系数据库
5
排序和定额可以一起使用。 例6 查询信息系年龄最大的三个学生的学号及其年龄
第二章 关系数据库 8
(8)用全称量词的检索 例12 查询不选1号课程的学生名字 RANGE SC SCX GET W (Student.Sname): ∨ SCX (SCX.Sno≠Student.Sno ∨ o≠'1') (9)用两种量词的检索 例13 查询选修了全部课程的学生姓名 RANGE Course CX SC SCX GET W (Student.Sname): ∨CXヨSCX (SCX.Sno=Student.Sno ∧ o=o)
第二章 关系数据库
10
例15 查询学生所在系的数目 GET W (COUNT(Student.Sdept)) COUNT函数在计数时会自动排除重复的Sdept值。 例16 查询信息系学生的平均年龄 GET W (AVG(Student.Sage): Student.Sdept='IS')
第二章 关系数据库
第二章 关系数据库
9
(11)集函数 用户在使用查询语言时,经常要作一些简单的计算,例 如要求符合某一查询要求的元组数,求某个关系中所有元组 在某属性上的值的总和或平均值等。为了方便用户,关系数 据语言中建立了有关这类运算的标准函数库供用户选用。这 类函数通常称为集函数(Aggregation function)或内部函数 (Build-in function)。 COUNT TOTAL MAX MIN AVG 对元组计数 求总和 求最大值 求最小值 求平均值
11
二、 更新操作 (1) 修改操作 修改操作用UPDATE语句实现。其步骤是: ·首先用HOLD语句将要修改的元组从数据库中读到工作 空间中 ·然后用宿主语言修改工作空间中元组的属性 ·最后用UPDATE语句将修改后的元组送回数据库中 需要注意的是,单纯检索数据使用GET语句即可,但为 修改数据而读元组时必须使用HOLD语句,HOLD语句是带 上并发控制的GET语句。
第二章 关系数据库 7
例10 查询至少选修一门其先行课为6号课程的学生名字 RANGE Course CX SC SCX GET W (Student.Sname): ヨSCXヨCX (SCX.Sno=Student.Sno ∧ o=o ∧ CX.Pcno=‘6’) (7)带有多个关系的表达式的检索 例11 查询成绩为90分以上的学生名字与课程名字 本查询所要求的结果学生名字和课程名字分别在Student和 Course两个关系中。 RANGE SC SCX GET W(Student.Sname, ame): ヨSCX (SCX.Grade≥90 ∧ SCX.Sno=Student.Sno ∧ o=o)
GET W (3) (Student.Sno, Student.Sage): Student.Sdept='IS' DOWN Student.Sage
(5)用元组变量的检索 元组变量主要有两方面的用途: ① 简化关系名。在处理实际问题时,如果关系的名字很 长,使用起来就会感到不方便,这时我们可以设一个较短名 字的元组变量来简化关系名。 ② 操作条件中使用量词时必须用元组变量。 元组变量是动态的概念,一个关系可以设多个元组变 量。
第二章 关系数据库
2
语句的基本格式是:
操作语句
工作空间名(表达式):
操作条件
其中表达式用于指定语句的操作对象,它可以是关系名或属 性名,一条语句可以同时操作多个关系或多个属性。操作条 件是一个逻辑表达式,用于将操作对象限定在满足条件的元 组中,操作条件可以为空。除此之外,还可以在基本格式的 基础上加上排序要求,定额要求等。
第二章 关系数据库
3
一、 检索操作 检索操作用GET语句实现。 (1)简单检索(即不带条件的检索) 例1 查询所有被选修课程的课程号码 GET W (o) 这里条件为空,表示没有限定条件。W为工作空间名。 例2 查询所有学生的数据 GET W (Student) (2)限定的检索(即带条件的检索) 例3 查询信息系(IS)中年龄小于20岁的学生的学号和年龄
GET W (Student.Sno, Student.Sage): Student.Sdept='IS' ∧ Student.Sage<20
第二章 关系数据库
4
(3)带排序的检索 例4 查询计算机科学系(CS)学生的学号、年龄,并按年 龄降序排序
GET W (Student.Sno, Student.Sage): Student.Sdept='CS' DOWN Student.Sage
第二章 关系数据库 6
例7 查询信息系学生的名字 RANGE Student X GET W (X.Sname): X.Sdept='IS' 这里元组变量X的作用是简化关系名Student。 (6)用存在量词的检索 例8 查询选修2号课程的学生名字 RANGE SC X GET W (Student.Sname): ヨX(X.Sno=Student.Sno ∧ o='2') 例9 查询选修了其直接先行课是6号课程的课程的学生学号 RANGE Course CX GET W (SC.Sno): ヨCX (o=o ∧ CX.Pcno='6')
第二章 关系数据库
1Hale Waihona Puke 1.元组关系演算ALPHA 元组关系演算以元组变量作为谓词变元的基本对象。一 种典型的元组关系演算语言是E.F.Codd提出ALPHA语言,这 一语言虽然没有实际实现,但关系数据库管理系统INGRES 所用的QUEL语言是参照ALPHA语言研制的,与ALPHA十 分类似。 ALPHA语言主要有GET、PUT、HOLD、UPDATE、 DELETE、DROP六条语句。
(4)带定额的检索 例5 取出一个信息系学生的学号 GET W (1) (Student.Sno): Student.Sdept='IS' 所谓带定额的检索是指指定检索出元组的个数,方法是在W 后括号中加上定额数量。
第二章 关系数据库
5
排序和定额可以一起使用。 例6 查询信息系年龄最大的三个学生的学号及其年龄
第二章 关系数据库 8
(8)用全称量词的检索 例12 查询不选1号课程的学生名字 RANGE SC SCX GET W (Student.Sname): ∨ SCX (SCX.Sno≠Student.Sno ∨ o≠'1') (9)用两种量词的检索 例13 查询选修了全部课程的学生姓名 RANGE Course CX SC SCX GET W (Student.Sname): ∨CXヨSCX (SCX.Sno=Student.Sno ∧ o=o)
第二章 关系数据库
10
例15 查询学生所在系的数目 GET W (COUNT(Student.Sdept)) COUNT函数在计数时会自动排除重复的Sdept值。 例16 查询信息系学生的平均年龄 GET W (AVG(Student.Sage): Student.Sdept='IS')
第二章 关系数据库
第二章 关系数据库
9
(11)集函数 用户在使用查询语言时,经常要作一些简单的计算,例 如要求符合某一查询要求的元组数,求某个关系中所有元组 在某属性上的值的总和或平均值等。为了方便用户,关系数 据语言中建立了有关这类运算的标准函数库供用户选用。这 类函数通常称为集函数(Aggregation function)或内部函数 (Build-in function)。 COUNT TOTAL MAX MIN AVG 对元组计数 求总和 求最大值 求最小值 求平均值
11
二、 更新操作 (1) 修改操作 修改操作用UPDATE语句实现。其步骤是: ·首先用HOLD语句将要修改的元组从数据库中读到工作 空间中 ·然后用宿主语言修改工作空间中元组的属性 ·最后用UPDATE语句将修改后的元组送回数据库中 需要注意的是,单纯检索数据使用GET语句即可,但为 修改数据而读元组时必须使用HOLD语句,HOLD语句是带 上并发控制的GET语句。
第二章 关系数据库 7
例10 查询至少选修一门其先行课为6号课程的学生名字 RANGE Course CX SC SCX GET W (Student.Sname): ヨSCXヨCX (SCX.Sno=Student.Sno ∧ o=o ∧ CX.Pcno=‘6’) (7)带有多个关系的表达式的检索 例11 查询成绩为90分以上的学生名字与课程名字 本查询所要求的结果学生名字和课程名字分别在Student和 Course两个关系中。 RANGE SC SCX GET W(Student.Sname, ame): ヨSCX (SCX.Grade≥90 ∧ SCX.Sno=Student.Sno ∧ o=o)
GET W (3) (Student.Sno, Student.Sage): Student.Sdept='IS' DOWN Student.Sage
(5)用元组变量的检索 元组变量主要有两方面的用途: ① 简化关系名。在处理实际问题时,如果关系的名字很 长,使用起来就会感到不方便,这时我们可以设一个较短名 字的元组变量来简化关系名。 ② 操作条件中使用量词时必须用元组变量。 元组变量是动态的概念,一个关系可以设多个元组变 量。
第二章 关系数据库
2
语句的基本格式是:
操作语句
工作空间名(表达式):
操作条件
其中表达式用于指定语句的操作对象,它可以是关系名或属 性名,一条语句可以同时操作多个关系或多个属性。操作条 件是一个逻辑表达式,用于将操作对象限定在满足条件的元 组中,操作条件可以为空。除此之外,还可以在基本格式的 基础上加上排序要求,定额要求等。
第二章 关系数据库
3
一、 检索操作 检索操作用GET语句实现。 (1)简单检索(即不带条件的检索) 例1 查询所有被选修课程的课程号码 GET W (o) 这里条件为空,表示没有限定条件。W为工作空间名。 例2 查询所有学生的数据 GET W (Student) (2)限定的检索(即带条件的检索) 例3 查询信息系(IS)中年龄小于20岁的学生的学号和年龄
GET W (Student.Sno, Student.Sage): Student.Sdept='IS' ∧ Student.Sage<20
第二章 关系数据库
4
(3)带排序的检索 例4 查询计算机科学系(CS)学生的学号、年龄,并按年 龄降序排序
GET W (Student.Sno, Student.Sage): Student.Sdept='CS' DOWN Student.Sage
第二章 关系数据库 6
例7 查询信息系学生的名字 RANGE Student X GET W (X.Sname): X.Sdept='IS' 这里元组变量X的作用是简化关系名Student。 (6)用存在量词的检索 例8 查询选修2号课程的学生名字 RANGE SC X GET W (Student.Sname): ヨX(X.Sno=Student.Sno ∧ o='2') 例9 查询选修了其直接先行课是6号课程的课程的学生学号 RANGE Course CX GET W (SC.Sno): ヨCX (o=o ∧ CX.Pcno='6')