数据库系统概论——关系演算

数据库系统概论——关系演算

关系演算语言用谓词来表达查询要求,以数理逻辑中的谓词演算为基础

以谓词变元分类

  1. 元组关系演算

以元组变量作为谓词变元的基本对象,如ALPHA语言

  1. 域关系演算

以域变量作为谓词变元的基本对象,如QBE语言

元组关系演算语言

简单检索

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

限定的检索

格式:GET 工作空间名 (表达式1) : 条件

带排序的检索

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

带定额的检索

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

用元组变量的检索

  • 元组变量的函数

元组变量(Tuple Variable)指的是表示可以在某一关系范围内变化的变量,也称为范围变量(Range Variable

  • 用途

元组变量可以通过替换较长关系名来简化关系名且条件中的量词必须使用元组变量

  • 定义

格式:RANGE 关系名 变量名

一个关系可以设置多个元组变量

存在量词检索

例如,查询选修2号课程的学生名字

RANGE SC X GET W (Student.Sname):∃X(X.Sno=Student.Sno ∧ X.Cno = '2')

查询至少选修一门其先行课为6号课程的学生的名字

RANGE Course CX SC SCX GET W (Student.Sname): ∃SCX (SC.Sno = Student.Sno ∧ ∃CX(CX>Cno=SCX.Cno) ∧ CX.Pcno='6')

多关系表达式检索

例如,查询成绩90分以上的学生名字与课程名字

RANGE SC SCX GET W(Student.Sname, Course.Cname): ∃SCX(SCX.Grade >= 90 ∧ SCX.Sno=Student.Sno ∧ Course.Cno=SCX.Cno)

全称量词检索

例如,查询不选择1号课程的学生名字

RANGE SC SCX GET W(Student.Sname): ∀SCX (SCX.Sno ≠ Student.Sno ∨ SCX.Cno ≠ 'c1')

蕴含检索

例如,查询至少选修了S3学生所选课程的学生学号

RANGE
Course CX
SC SCX
SC SCY
GET W(Studnet.Sno):
∀CX (∃SCX (SCX.Sno='S3' ∧ SCX.Cno = CX.Cno) → ∃SCY (SCY.Sno=Student.Sno ∧ SCY.Cno = CX.Cno) )

S3选了课,则与其选相同课的学生被选取,若S3没有选课,则所有同学被选取

聚集函数

函数名功能
COUNT对元组计数
TOTAL求总和
MAX求最大值
MIN求最小值
AVG求平均值

例如,查询学生所在系数目

GET W(COUNT(Student.Sdepth))

域关系演算语言

域关系演算语言Query By Example, QBE基于屏幕表格的查询语言,以元组变量的分量即域变量作为谓词变元的基本对象,在关系数据库管理系统IBM370上得以实现,QBE要求以填写表格的方式构造查询,用示例元素(域变量)来表示查询结果的可能情况,查询结果同样以表格形式显示

要素

  • 示例元素

示例元素可能是一个值

  • 打印操作符

P.

  • 查询条件

比较运算符>,≥,<,≤,=,≠

简单查询

例如,查询学生的名字,其中T为示例元素,即域变量

Studentnonamesexagedept
P.TCS

查询结果

Studentnonamesexagedept
TonyCS

例如,显示所有元组

Studentnonamesexagedept
P.

条件查询

  • 与条件

查询CS系年龄大于19的学生学号

Studentnonamesexagedept
P.20200001> 19CS
  • 或条件

查询CS系或年龄大于19的学生学号

Studentnonamesexagedept
P.20200001CS
P.20200001> 19
  • 多表连接

例如,查询选修1号课程的学生姓名

Studentstudent_nonamesexagedept
20200001P.Tony> 19CS
Coursestudent_nocourse_nograde
202000011

示例元素student_no是连接属性,其值在两个表中要相同

例如,查询选修1号课程的学生姓名

Studentstudent_nonamesexagedept
20200001P.Tony> 19CS
Coursestudent_nocourse_nograde
202000011

在关系名下填写非符号

例如,查询有两个人以上选修的课程号

Coursestudent_nocourse_nograde
20200001P.1
┐202000011

查询不仅被20200001学生选修,还被另一个学生┐20200001选修的课程1

聚集函数

函数名功能
COUNT对元组计数
TOTAL求总和
MAX求最大值
MIN求最小值
AVG求平均值

例如,查询CS系的平均年龄

Studentnonamesexagedept
P.AVG.ALLCS

排序

顺序符号
升序排序AO.
降序排序DO.
多列排序AO(i)./DO(i)

例如,查询全体男生姓名,要求查询结果按照所在系升序,相同系以年龄降序

Studentnonamesexagedept
P.TonymaleDO(2).AO(1).

鸣谢

数据库系统概论(第5版)

最后

  • 由于博主水平有限,不免有疏漏之处,欢迎读者随时批评指正,以免造成不必要的误解
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值