第二章 关系数据库

第一节 第二节 第三节 第四节 第五节

第五节 关系演算            (1) (2) (3) (4) (5) (6)
[例9] 查询选修了这样课程的学生学号,其直接先行课是6号课程。
    RANGE Course CX GET W (SC.Sno):
    CX (CX.Cno=SC.Cno∧CX.Pcno='6')
[例10]查询至少选修一门其先行课为6号课程的学生名字
    RANGE Course CX
    SC SCX
    GET W (Student.Sname):SCX (SCX.Sno=Student.Sno∧
    CX (CX.Cno=SCX.Cno∧CX.Pcno='6'))
前束范式形式:
    GET W (Student.Sname):
    SCX CX (SCX.Sno=Student.Sno∧
    CX.Cno=SCX.Cno∧CX.Pcno='6')
(7)带有多个关系的表达式的检索
[例11] 查询成绩为90分以上的学生名字与课程名字。
    RANGE SC SCX
    GET W(Student.Sname,Course.Cname):
    SCX (SCX.Grade≥90∧
    SCX.Sno=Student.Sno∧
    Course.Cno=SCX.Cno)
(8)用全称量词的检索
[例12] 查询不选1号课程的学生名字。
    RANGE SC SCX GET W (Student.Sname): SCX
    (SCX.Sno≠Student.Sno∨SCX.Cno≠'1')
用存在量词表示:
    RANGE SC SCX
    GET W (Student.Sname):SCX
    (SCX.Sno=Student.Sno∧SCX.Cno='1')
(9)用两种量词的检索
[例13] 查询选修了全部课程的学生姓名。
    RANGE Course CX
    SC SCX
    GET W (Student.Sname):∨CX SCX
    (SCX.Sno=Student.Sno∧
    SCX.Cno=CX.Cno)
(10)用蕴函(Implication)的检索
[例14] 查询最少选修了95002学生所选课程的学生学号。
    RANGE Couse CX
    SC SCX
    SC SCY
    GET W (Student.Sno):CX(SCX
    (SCX.Sno='95002'∧SCX.Cno=CX.Cno)
    SCY(SCY.Sno=Student.Sno∧
    SCY.Cno= CX.Cno))
(11)集函数
    常用集函数(Aggregation function)或内部函数(Build-in function)
        
[例15] 查询学生所在系的数目。
    GET W ( COUNT(Student.Sdept) )
    COUNT函数在计数时会自动排除重复值。
[例16] 查询信息系学生的平均年龄
    GET W (AVG(Student.Sage):
    Student.Sdept='IS’ )
二、更新操作
(1)修改操作步骤
    ① 用HOLD语句将要修改的元组从数据库中读到工作空间中:
    HOLD 工作空间名(表达式1)[:操作条件 ]
    HOLD语句是带上并发控制的GET语句
    ② 用宿主语言修改工作空间中元组的属性
    ③ 用UPDATE语句将修改后的元组送回数据库中:
    UPDATE 工作空间名
[例17] 把95007学生从计算机科学系转到信息系。
    HOLD W (Student.Sno, Student.Sdetp):
    Student.Sno='95007'
(从Student关系中读出95007学生的数据)
    MOVE 'IS' TO W.Sdept
(用宿主语言进行修改)
    UPDATE W
(把修改后的元组送回Student关系)
(2)插入操作
步骤:
    ① 用宿主语言在工作空间中建立新元组
    ② 用PUT语句把该元组存入指定关系中
    PUT 工作空间名 (关系名)
    PUT语句只对一个关系操作
[例18] 学校新开设了一门2学分的课程“计算机组织与结构”,其课程号为8,直接先行课为6号课程。插入
该课程元组。
    MOVE '8' TO W.Cno
    MOVE '计算机组织与结构' TO W.Cname
    MOVE '6' TO W.Cpno
    MOVE '2' TO W.Ccredit
    PUT W (Course)
(3)删除操作
    ① 用HOLD语句把要删除的元组从数据库中读到工作空间中
    ② 用DELETE语句删除该元组
    DELETE 工作空间名
[例19] 95110学生因故退学,删除该学生元组。
    HOLD W (Student): Student.Sno='95110'
    DELETE W
[例20] 将学号95001改为95102。
    HOLD W (Student): Student.Sno='95001'
    DELETE W
    MOVE '95102' TO W.Sno
    MOVE '李勇' TO W.Sname
    MOVE '男' O W.Ssex
    MOVE '20' TO W.Sage
    MOVE 'CS' TO W.Sdept
    PUT W (Student)

吉林大学网络教育学院 版权所有