元组关系演算语言ALPHA
简介
元组关系演算是以元组变量作为谓词变元的基本关系演算表达形式。一种典型的元组关系演算语言是ALPHA语言,ALPHA语言主要有GET、PUT、HOLD、UPDATE、DELETE、DROP语句,其基本格式是:操作语句 工作空间名(表达式):操作条件
一、检索操作(GET)
1.简单检索
简单检索,即不带条件的检索
例:查询所有被选修课程的课程号码:GET W(SC.CNO)
例:查询所有学生的信息:GET W(S)
2.带条件的检索
带条件的检索即限定的检索,由冒号后面的逻辑表达式给出查询条件
例:查询计算机系(CS)中年龄小于22岁的学生的学号和姓名:GET W(S.SNO,S.SN):S.DEPT='CS'∧S.AGE<22
3.带排序的检索
当升序排列时使用UP,后面紧跟排序的属性名,DOWN代表降序排序
例:查询信息系(IS)学生的学号、年龄,并按年龄降序排序:GET W(S.SNO,S.AGE):S.DEPT='IS' DOWN S.AGE
4.带定额的检索
所谓带定额的检索是指规定了检索的元组个数,方法是在W后面的括号中加上定额数量
例:取出一个信息系学生的姓名:GET W(1)(S.SN):S.DEPT='IS'
例:查询信息系年龄最大的三个学生的学号及其年龄,并按年龄降序排列:GET W(3)(S.SNO,S.AGE):S.DEPT='IS' DOWN S.AGE
5.用元组变量的检索
因为元组变量是在某一关系范围内变化的,所以元组变量又称范围变量,主要有两方面的用途:
(1)简化关系名
在实际处理问题时,可以设一个较短名字的元组变量来简化关系名
例:查询信息系学生的名字:
RANGE Student S
GET W(S.SN):S.DEPT='IS'
(2)操作条件中使用量词时必须用元组变量
元组变量是动态或逻辑的概念,一个关系可以设多个元组变量,每个元组变量独立地代表该关系中的任一元组
6.用存在量词的检索
例:查询选修了直接先修课为C2号课程的学生学号:
RANGE C CX
GET W(SC.SNO):∃CX(CX.CNO=SC.CNO∧CX.CPNO='C2')
#表示从选修表当前记录中取学号,条件是存在一门课CX,其直接先修课为C2,该课程正为该学号学生所选
例:查询至少选修一门其先修课为C2号课程的学生姓名
RANGE C CX
SC SCX
GET W(S.SN):∃CX∃SCX(SCX.SNO=S.SNO∧CX.CNO=SCX.CNO∧CX.CPNO='C2')
#表示从学生关系中当前记录取名字,条件是该学生存在选修关系SCX,还存在某课程CX,其先修课程为C2,课程CX为SCX所含的课程
7.带有多个关系的表达式的检索
上面例子中虽然查询时可能会涉及多个关系,但查询结果都在一个关系中,即查询结果表达式中只有一个关系,实际上表达式中是可以有多个关系的。
例:查询成绩为90分以上的学生姓名和课程名:
RANGE SC SCX
GET W(S.SN,C.CN):∃SCX(SCX.SNO=S.SNO∧SCX.CNO=C.CNO∧SCX.SCORE≥90)
#分别从学生表S和课程表C的当前记录中取学生姓名和课程名,条件是有选修关系SCX存在,并选修了该课程,成绩≥90分
8.用全称量词的检索
例:查询不选C1号课程的学生姓名:
RANGE SC SCX
GET W(S.SN):∀SCX(SCX.SNO≠S.SNO∨SCX.CNO≠'C1')
#从学生表S的当前记录中取姓名,条件是对任意的选修元组SCX都满足:该选修元组不是当前检索学生的选修记录或者是该学生的选修记录单课程号不是C1
同样也可以用存在量词检索
RANGE SC SCX
GET W(S.SN):¬∃SCX(SCX.SNO=S.SNO∧SCX.CNO='C1')
#从学生表S的当前记录中取姓名,条件是该学生不存在对C1课程的选修元组SCX
9.用两种量词的检索
例:查询选修了全部课程的学生姓名
RANGE C CX
SC SCX
GET W(S.SN):∀CX∃SCX(SCX.SNO=S.SNO∧CX.CNO=SCX.CNO)
#从学生表S中取学生姓名,条件是对任意课程CX该学生都有选课关系SCX存在并选了CX这门课
10.用蕴含的检索
例:查询最少选修了学号为200402的学生所选课程的学生学号
RANGE C CX
SC SCX
SC SCY
GET W(S.SNO):∀CX(∃SCX(SCX.SNO='200402'∧SCX.CNO=CX.CNO)→∃SCY(SCY.SNO=S.SNO∧SCY.CNO=CX.CNO))
#从学生表S的当前记录取学号,条件是对任意课程CX都有:如果存在有200402学生的选修记录SCX,其选修课程是CX,则当前被检索学生比存在选修元组SCY也选修了课程CX
11.集函数
在使用查询语言时,经常要做一些简单计算,为了方便用户,关系数据语言中建立了有关这类运算的标准函数库供用户选用。这类函数通常称为集函数,关系演算中提供了下列集函数:
函数名 | 功能 |
---|---|
COUNT | 对元组计数 |
TOTAL | 求总和 |
MAX | 求最大值 |
MIN | 求最小值 |
AVG | 求平均值 |
例:查询信息系学生的平均年龄:GET W(AVG(S.AGE)):S.DEPT='IS'
二、更新操作(UPDATE)
1.修改操作
修改操作用UPDATE语句实现,首先用HOLD语句将要修改的元组从数据库中读到工作空间中,然后用宿主语言修改工作空间中的元组的属性,最后用UPDATE语句将修改后的元组送回数据库中
把200407学生从计算机科学系转到信息系
HOLD W(S.SNO,S.DEPT):S.SNO='200407' #从S关系中读出200407学生数据
MOVE 'IS' TO W.DEPT #用宿主语言进行修改
UPDATE W #把修改后的元组送回S关系
2.插入操作
插入操作用PUT语句实现,首先用宿主语言在工作空间中建立新元组,然后用PUT语句把该元组存入指定关系中
例:学校新开设了一门2学分的课程“计算机组织与结构”,其课程号为C8,直接先修课为C4,插入该课程元组
MOVE 'C8' TO W.CNO
MOVE '计算机组织与结构' TO W.CN
MOVE 'C4' TO W.CPNO
MOVE '2' TO W.CREDIT
PUT W(C) #把W中的元组插入指定关系C中
3.删除操作
删除操作用DELETE语句实现,用HOLD语句把要删除的元组从数据库中读到工作空间中,再用DELETE语句删除该元组
例:200410学生退学,删除该学生元组
HOLD W(S):S.SNO='200410'
DELETE W
例:将学号200401改为200410 #该属性为主码,应先执行删除操作
HOLD W(S):S.SNO='200401'
DELETE W
MOVE '200410' TO W.SNO #再插入新元组
MOVE '李力' TO W.SN
MOVE '男' TO W.SEX
MOVE '20' TO W.AGE
MOVE 'CS' TO W.DEPT
PUT W(S)
本文到此就结束了,如有错误欢迎大家批评指正。