携手创作,共同成长!这是我参与「掘金日新计划 · 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 关系名 变量名
一个关系可以设多个元组变量
聚集函数
| 函数名 | 功能 |
|---|---|
| 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.系统显示该关系的属性名
| Student | Son | Sname | Ssex | Sage | Sdept |
|---|---|---|---|---|---|
5.用户在上面构造查询要求
| Student | Son | Sname | Ssex | Sage | Sdept |
|---|---|---|---|---|---|
| P.T | IS |
T是示例元素,即域变量
6.屏幕显示查询结果
| Student | Son | Sname | Ssex | Sage | Sdept |
|---|---|---|---|---|---|
| 李勇 张立 | IS |
求年龄大于19岁的学生的学号
| Student | Son | Sname | Ssex | Sage | Sdept |
|---|---|---|---|---|---|
| P.200215121 | >19 |
与条件
| Sc | Sno | Cno | Grade |
|---|---|---|---|
| P.200215121 P.200215121 | 1 2 |
或条件
| Student | Son | Sname | Ssex | Sage | Sdept |
|---|---|---|---|---|---|
| P.200215121 P.200215122 | >19 | CS |
聚集函数
| 函数名 | 功能 |
|---|---|
| CNT | 对元组计数 |
| SUM | 求总和 |
| MAX | 求最大值 |
| MIN | 求最小值 |
| AVG | 求平均值 |
查询信息系学生的平均年龄
| Student | Son | Sname | Ssex | Sage | Sdept |
|---|---|---|---|---|---|
| P.AVG.ALL |
对查询结果排序
升序排序:
- 对查询结果按某个属性值的升序排序,只需在相应列中填入“AO.”
降序排序:
- 按降序排序则填“DO.”
多列排序:
- 如果按多列排序,用“AO(i).”或“DO(i).”表示,其中i为排序的优先级,i值越小,优先级越高
查全体男生的姓名,要求查询结果按所在系升序排序,对相同系的学生按年龄降序排序
| Student | Son | Sname | Ssex | Sage | Sdept |
|---|---|---|---|---|---|
| P.李勇 | 男 | DO(2). | AO(1). |