简介:域关系演算以元组变量的分量即域变量作为谓词变元的基本对象。QBE语言是一种基于屏幕表格的查询语言,用户通过终端屏幕编辑程序以填写表格的方式进行查询,查询的结果也以表格的形式显示。
QBE操作框架:
关系名 | 属性名1 | 属性名2 | 属性名3 | 属性名... |
操作命令 | 元组属性值/查询条件/操作命令 | 元组属性值/查询条件/操作命令 | 元组属性值/查询条件/操作命令 | 元组属性值/查询条件/操作命令 |
1、检索操作
#求信息系全体学生的姓名
步骤:
1、用户提出要求
2、屏幕显示空白表格
3、用户在最左边一栏输入关系名Student
4、系统显示该关系的属性名
5、用户在上面构造查询要求
Student | Sno | Sname | Sage | Sdept |
| | P.T | | IS |
说明:T为示例元素即域变量。QBE要求域变量一定要加上下划线。IS是查询条件,不用加下划线。P是操作符,表示打印。示例元素不必是真实存在的一个元素。
6、屏幕显示查询结果
Student | Sno | Sname | Sage | Sdept |
| | 张立 | | IS |
#查询全体学生的信息
5、用户在上面构造查询要求
Student | Sno | Sname | Sage | Sdept |
| P.201215121 | P.李勇 | P.21 | P.CS |
或者
Student | Sno | Sname | Sage | Sdept |
P. | | | | |
#求年龄大于19岁的学生的学号
Student | Sno | Sname | Sage | Sdept |
| P.201215121 | | >19 | |
#求计算机系年龄大于19岁的学生的学号
Student | Sno | Sname | Sage | Sdept |
| P.201215121 | | >19 | CS |
或者
Student | Sno | Sname | Sage | Sdept |
| P.201215121 | | >19 | |
| P.201215121 | | | CS |
#查询即选了1号课程又选了2号课程的学生学号
SC | Sno | Cno | Grade |
| P.201215121 | 1 | |
| P.201215121 | 2 | |
#查询选修1号课程的学生姓名
Student | Sno | Sname | Sage | Sdept |
| 201215121 | P.李勇 | | |
#查询未选修1号课程的学生姓名
Student | Sno | Sname | Sage | Sdept |
| 201215121 | P.李勇 | | |
| 201215122 | P.张勇 | | |
SC | Sno | Cno | Grade |
! | 201215121 | 1 | |
! | 201215122 | | |
#查询有两个人以上选修的课程号
SC | Sno | Cno | Grade |
| 2015121 | P.1 | |
| !2015121 | 1 | |
2、聚集函数
为了方便用户,QBE提供了一些聚集函数,主要包括CNT,SUM,AVG,MAX,MIN
函数名 | 功能 |
CNT | 对元组计数 |
SUM | 求总和 |
AVG | 求平均值 |
MAX | 求最大值 |
MIN | 求最小值 |
#查询信息系学生的平均年龄
Student | Sno | Sname | Sage | Sdept |
| | | P.AVG.ALL. | IS |
3、对查询结果排序
对查询的某个属性按升序排序,只需要在相应列表中加入'AO.',按降序排序则填入'DO.'。如果是按多个属性排序,则可以使用'AO(i).'或者'DO(i).'。其中i表示排序的优先级。
#查询全体男生的姓名,要求查询结果按所在系升序排列,对相同系的学生按年龄降序排序
Student | Sno | Sname | Ssex | Sage | Sdept |
| | P.张立 | 男 | DO(2). | AO(1). |
4、更新操作
修改操作符为'U.',在QBE语言中,主码不允许修改。
#把201215121学生的年龄改为18岁
Student | Sno | Sname | Ssex | Sage | Sdept |
| 201215121 | | | U.18 | |
#把学号201215121学生的年龄增加1岁
Student | Sno | Sname | Ssex | Sage | Sdept |
| 201215121 | | | 17 | |
U. | 201215121 | | | 17+1 | |
#将所有计算机系的学生的年龄加1
Student | Sno | Sname | Ssex | Sage | Sdept |
| 201215121 | | | 17 | CS |
U. | 201215121 | | | 17+1 | |
5、删除操作
删除操作的操作符是'D.'
#删除学生201215189
Student | Sno | Sname | Ssex | Sage | Sdept |
D. | 201215189 | | | | |
说明:但是由于数据库需要保持完整性,还需要将具有参照关系的表中的数据删除。