数据库 - 关系演算

关系演算

以数理逻辑中的谓词演算为基础
按谓词变元不同 进行分类
1.元组关系演算:
以元组变量作为谓词变元的基本对象
元组关系演算语言ALPHA
2.域关系演算:
以域变量作为谓词变元的基本对象
域关系演算语言QBE

由E.F.Codd提出
INGRES所用的QUEL语言是参照ALPHA语言研制的
语句
检索语句
GET
更新语句
PUT,HOLD,UPDATEDELETEDROP

检索操作

语句格式:
     GET 工作空间名  [(定额)](表达式1)
               [:操作条件] [DOWN/UP 表达式2]
 定额:规定检索的元组个数
格式:        数字
表达式1:指定语句的操作对象
格式:
关系名| 关系名. 属性名| 元组变量. 属性名| 集函数 [,…  ]
操作条件:将操作结果限定在满足条件的元组中
格式:        逻辑表达式
表达式2:指定排序方式
格式:        关系名. 属性名| 元组变量. 属性名[,…  ]

(1)简单检索

GET 工作空间名 (表达式1)

[例1] 查询所有被选修的课程号码。
GET W (SC.Cno)
[例2] 查询所有学生的数据。
GET W (Student)
格式
GET 工作空间名(表达式1):操作条件

[例3]查询信息系(IS)中年龄小于20岁的学生的学号和年龄
    GET  W  (Student.SnoStudent.Sage): 
     Student.Sdept='IS' Student.Sage<20

格式
GET 工作空间名(表达式1)[:操作条件]
DOWN/UP 表达式2

  [例4]查询计算机科学系(CS)学生的学号、年龄,结果按年龄降   
           序排序
    GET  W  (Student.Sno,Student.Sage):
               Student.Sdept='CS‘ DOWN Student.Sage

格式
GET 工作空间名(定额)(表达式1)
[:操作条件] [DOWN/UP 表达式2]

[例5]  取出一个信息系学生的学号。
    GET  W  (1)  (Student.Sno):
             Student.Sdept='IS' 
[例6]  查询信息系年龄最大的三个学生的学号及其年龄,结果按年龄降序排序。
        GET  W (3)  (Student.Sno,Student.Sage):
         Student.Sdept='IS' DOWN Student.Sage

用元组变量的检索

元组变量的含义
表示可以在某一关系范围内变化(也称为范围变量Range Variable)
元组变量的用途
① 简化关系名:设一个较短名字的元组变量来代替较长的关系名。
② 操作条件中使用量词时必须用元组变量。
定义元组变量
格式:RANGE 关系名 变量名
一个关系可以设多个元组变量

用存在量词的检索

操作条件中使用量词时必须用元组变量

[例8]  查询选修2号课程的学生名字。
   RANGE  SC  XGET W (Student.Sname): X(X.Sno=Student.SnoX.Cno='2')
[例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')

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

 [例11]  查询成绩为90分以上的学生名字与课程名字。
     RANGE  SC  SCX
     GET  W(Student.Sname,Course.Cname):       
            SCX (SCX.Grade90 ∧ 
              SCX.Sno=Student.Sno∧
              Course.Cno=SCX.Cno)

用全称量词的检索

 [例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')

用两种量词的检索

[例13]  查询选修了全部课程的学生姓名。
          RANGE  Course  CX
                         SC         SCX
          GET  W  (Student.Sname): 
   CX SCX (SCX.Sno=Student.Sno∧ 
                SCX.Cno=CX.Cno)

用蕴函(Implication)的检索

 [例14]  查询最少选修了200215122学生所选课程的学生学号
          RANGE  Couse  CX
                           SC     SCX 
                           SC     SCY
          GET  W  (Student.Sno):      CX(SCX
          (SCX.Sno=‘200215122'∧SCX.Cno=CX.Cno)SCY(SCY.Sno=Student.Sno∧                                                                   SCY.Cno= CX.Cno))

聚集函数

[例15]  查询学生所在系的数目。
         GET  W  ( COUNT(Student.Sdept) )
      COUNT函数在计数时会自动排除重复值。

[例16]  查询信息系学生的平均年龄
              GET  W  (AVG(Student.Sage):                  
              Student.Sdept='IS’  )
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值