数据库系统-关系演算

275 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第12天,点击查看活动详情

数据库系统-关系演算

关系演算

以数理逻辑中的谓词演算为基础

按谓词变元不同进行分类

  • 元组关系演算
    • 以元组变量作为谓词变元的基本对象
    • 元组关系演算语言ALPHA
  • 域关系演算
    • 以域变量作为谓词变元的基本对象
    • 域关系演算语言QBE

元组关系演算语言ALPHA

语句格式

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

表达式1:指定 语句的操作对象

​ 格式:关系名|关系名.属性名|元组变量.属性名|集函数[,...]

条件:结果元组应该满足的条件

​ 格式:逻辑表达式

表达式2:指定排序方式

​ 格式:关系名.属性名|元组变量.属性名[,...]

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

查询所有被选修的课程号码

GET W (SC.Cno)

查询使用学生的数据

GET W (Student)

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

查询信息系(IS)中年龄小于20岁的学生的学号和年龄

GET W (Student.Sno, Student.Sage): Student.Sdept = 'IS' ^ Student.Sage<20

带排序的检索

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

​ DOWN | UP 表达式2

查询计算机科学系(CS)学生的学号、年龄,结果按年龄降序排序

GET W (Student.Sno,Student.Sage):

Student.Sdept='CS' DOWN Student.Sage

带定额的检索

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

​ [: 条件] [DOWN | UP 表达式2]

取出一个信息系学生的学号

​ GET W (1) (Student.Sno): Student.Sdept='IS'

用元组变量的检索

元组关系演算:以元组变量作为谓词变元的基本对象

  • 元组变量的含义

    表示可以在某一关系范围内变化

    也称为范围变量Range Variable

  • 元组变量的用途

    简化关系名:设一个较名字的元组变量来代替较长的关系名

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

  • 定义元组变量

    格式:RANGE 关系名 变量名

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

image-20220314175435505

image-20220314175524281

image-20220314175705244

聚集函数

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

查询学生所在系的数目

GET W (COUNT(Student.Sdept))

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

域关系演算语言QBE

一种典型的域关系演算语言

  • 以元组变量的分量即域变量作为谓词变元的基本对象
  • 1978年在IBM370上得以实现
  • QBE也指此关系数据库管理系统

QBE:Query By Example

  • 基于屏幕表格的查询语言
  • 查询要求:以填写表格的方式构造查询
  • 用示例元素(域变量)来表示查询结果可能的情况
  • 查询结果:以表格形式显示

简单查询

求信息系全体学生的姓名

1.用户提出要求:

2.屏幕显示空白表格

3.用户在最左边一栏输入要查询的关系名Student

Student

4.系统显示该关系的属性名

StudentSonSnameSsexSageSdept

5.用户在上面构造查询要求

StudentSonSnameSsexSageSdept
P.TIS

T是示例元素,即域变量

6.屏幕显示查询结果

StudentSonSnameSsexSageSdept
李勇
张立
IS

求年龄大于19岁的学生的学号

StudentSonSnameSsexSageSdept
P.200215121>19

与条件

ScSnoCnoGrade
P.200215121
P.200215121
1
2

或条件

StudentSonSnameSsexSageSdept
P.200215121
P.200215122

>19
CS

聚集函数

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

查询信息系学生的平均年龄

StudentSonSnameSsexSageSdept
P.AVG.ALL

对查询结果排序

升序排序:

  • 对查询结果按某个属性值的升序排序,只需在相应列中填入“AO.”

降序排序:

  • 按降序排序则填“DO.”

多列排序:

  • 如果按多列排序,用“AO(i).”或“DO(i).”表示,其中i为排序的优先级,i值越小,优先级越高

查全体男生的姓名,要求查询结果按所在系升序排序,对相同系的学生按年龄降序排序

StudentSonSnameSsexSageSdept
P.李勇DO(2).AO(1).