关系演算

操作语句格式

操作语句 工作空间名(表达式) :操作条件
表达式:用于说明要查询的结果在,它可以是关系名或属性名
操作条件:是一个逻辑表达式说明查询结果要满足的条件,用于将操作结果限定在满足条件的元组中,操作条件可以为空。除此之外还可以在基本格式的基础上加上排序要求

GET

查询所有被选修的课程号码
GET W(SC.Con)
W为工作空间名。这里条件为空
查询所有学生的数据
GET W(Students)

  • 限定条件
    查询信息系中年龄小于20的学生学号和年龄
    (当面对多个条件时,要分析出多个条件之间的关系,是并?是或?)
    GET W(Student.Sno,Student.Sage):Student.Sdept="IS" “并” Student.Sage<20
  • 带升降序的检索
    查询计科系(CS)学生的学号、年龄、结果按年龄降序排序
    GET W(Student.Sno,Student.Sage):Student.Sdept="CS" DOWN Student.Sage (升序UP,不管升降,都是从上往下排)
  • 指定返回元组的个数
    取出2个信息系学生的学号
    GET W(2) (Student.Sno):Student.Sdept="IS"
    括号中所填的数字,代表着届时名单顺序从上往下取几个
  • 用元组变量的检索
    元组变量是在某一关系范围内的变化(所以也称之为范围变量Range Variable),一个关系可以设置多个元组变量。元组变量主要有两方面的用途
    1.简化关系名 如,Student可以用S来代替,方便
    2.操作条件中使用两次是必须永远组变量
    ALPHA语言用RANGE来说明元组变量,格式:RANGE Student 变量名
    eg。查询信息系学生的名字
    RANGE Student X
    GET W(Student.Sname):X.Sdept="IS";
  • 用 存在量词 的检索条件中使用量词是必须用元组变量(一般条件下:查询用到多个表时才会使用)

    X的学号等于学生的学号,并且X的课号等于2
    eg

括号中的存在量词可以提出
解决问题的思路是统一的,无论是要求什么表的什么属性需要满足什么条件,都必须先在前面声明两个表之间的联系
前面的例题中出现在“并”之前的“变量.属性 = 表名.属性”就是在声明两个表之间的联系。(当关联其他表的时候使用声明,获取本表属性直接.检索就可以了)
也就是说,限定条件的书写,分成各个小块,就是先写表之间联系的属性,再写寻找条件。

  • 带有多个关系的表达式的检索

  • 全称量词

可以先反向求解,而后添加“非”符号,或者转换为全称量词

  • 蕴含(Implication)的检索,蕴含就是通过条件p,可以找出q,蕴含符号=>

  • 聚集函数(使用:在输出的属性前面书写整体连属性再加一个括号)

    COUNT在计数时会自动排除重复

更新操作

更新时要考虑到并发的问题(并发就是,对多人对同一数据读取或读写的情况进行处理)

  • 修改操作
    利用UPDATE##UPDATE
    修改数据,步骤:
    1.首先用HOLD语句将修改的元组从数据库中读到工作空间中(别名:加锁,以避免上述情况);(当用户将该数据读到工作空间中以后,在没有完成操作以前,别的用户便不能再对该数据进行操作)
    2.然后使用宿主语言就该工作空间中元组的属性值
    3.最后用UPDATE语句将修改后的元组返回到数据库中
    注意:单纯的搜索数据只用GET,而GET也只能够将数据读出来,并不能够给数据加锁;所以当要修改数据时,必须要用HOLD。
    所以说HOLD语句是带有并发的控制
    eg.

    HOLD语句与GET语句格式是一样的。
    HOLD W (Student.Sno,Student.Sdept):Student.Sno='20121512'//从学生表中将该学生的数据读到操作空间,并且为数据加锁
    MOVE 'IS' TO W.Sdept//注意,将需要填写的值传给操作空间W里的“要被修改的属性”,而不是直接传给目标表的属性。MOVE语句是用来传递值的
    UPDATE W//把修改后的元组送回Student表内
    说明:
    1.如果修改操作涉及到两个关系的话,就要执行两次HOLD-MOVE-UPDATE操作序列
    2.在ALPHA语言中,不允许进行修改主码的操作
    3.主码的修改,要先删除元组,而后在添加元组

插入操作PUT

PUT

步骤:
1.首先庸俗诸语言在工作空间中建立新元组
2.然后用PUT语句把该元组存入指定的关系中
PUT语句只对一个关系操作,也就是说表达式必须为单个表单
eg.

MOVE '8' TO W.Cno//把某个值,传到属性值中去
MOVE '计算机与科学' TO W.Cname//同上
MOVE '6' TO W.Cpno
MOVE '2' TO W.Ceredit
PUT W (Course)//再把工作空间中现有数据,传到Course表中

删除(存在并发)

操作存在并发的可能性时,我们就需要将读到操作空间内的数据进行加锁,那就要使用HOLD

DELETE

eg.

HOLD W (Student):Student.Sno='201215230'//前面讲过,HOLD操作需要将整个表读进来,当明确要求需要两个属性时,才写进去两个属性
DELETE W//将工作空间内的数据删除

eg.修改主码实例

之前说过修改住吗需要将整个元组删去,那么,将目标学生读到操作空间,进行删除之后,用MOVE将值传给属性,而后再利用PUT语句将所有信息编号再插入到表里
eg.删除全部学生
HOLD W(Student)
DELETE W
当某一个表被删除时,与之关联的其他表中的参照属性,也必须删除(现在很多预言师子系统自动删除的)

元组关系演算

原子公式有三类

R是关系名,t是元组名

其中的c就代表一个常量
表示:元组t第i个分量于长亮c满足比某种较关系
在关系演算中定义了“自由元组变量”和“约束元组变量”的概念。这些概念和谓词演算中的概念完全一样。若公式中的一个元组变量前有“全称量词”或“存在量词”,则称该变量为约束变量,否则称自由元组变量。

posted @ 2022-09-29 22:40  BattleTrumpet  阅读(144)  评论(0)    收藏  举报