《数据库系统概论》 第二章 关系数据库 讲义
[例9] 查询至少选修了一门其直接先行课为5号课程的 的学生姓名 π或 π或 π
[例10] 查询选修了全部课程的学生号码和姓名。 π 小结
关系代数运算 关系代数运算
并、差、交、笛卡尔积、投影、选择、连接、除 基本运算
并、差、笛卡尔积、投影、选择 交、连接、除
可以用5种基本运算来表达
引进它们并不增加语言的能力,但可以简化表达
关系代数表达式
关系代数运算经有限次复合后形成的式子
Sno,CnoSname
SnameSname
(σ
Cpno='5'
(Course SC Student))
(σ
Cpno='5'
(Course) SC π
Sno,Sname
(Student))
(π
Sno
(σ
Cpno='5'
(Course) SC) π
Sno,Sname
(Student))
(SC)÷π
Cno
(Course) π
Sno,Sname
(Student)
- 21 -
《数据库系统概论》 第二章 关系数据库 讲义
典型关系代数语言
ISBL(Information System Base Language) 由IBM United Kingdom研究中心研制
用于PRTV(Peterlee Relational Test Vehicle)实验系统
2.5 关系演算 关系演算
以数理逻辑中的谓词演算为基础 按谓词变元不同 进行分类 1.元组关系演算:
以元组变量作为谓词变元的基本对象 元组关系演算语言ALPHA 2.域关系演算:
以域变量作为谓词变元的基本对象 域关系演算语言QBE
2.5.1 元组关系演算语言ALPHA 由E.F.Codd提出
INGRES所用的QUEL语言是参照ALPHA语言研制的 语句 检索语句 GET 更新语句
PUT,HOLD,UPDATE,DELETE,DROP 一、检索操作 语句格式:
GET 工作空间名 [(定额)](表达式1) [:操作条件] [DOWN/UP 表达式2] 定额:规定检索的元组个数
- 22 -
《数据库系统概论》 第二章 关系数据库 讲义
格式: 数字 表达式1:指定语句的操作对象 格式:
关系名| 关系名. 属性名| 元组变量. 属性名| 集函数 [,? ] 操作条件:将操作结果限定在满足条件的元组中 格式: 逻辑表达式 表达式2:指定排序方式
格式: 关系名. 属性名| 元组变量. 属性名[,? ]一、检索操作
(1)简单检索
GET 工作空间名 (表达式1)
[例1] 查询所有被选修的课程号码。 GET W (SC.Cno) [例2] 查询所有学生的数据。 GET W (Student)
(2)限定的检索 格式
GET 工作空间名(表达式1):操作条件
[例3] 查询信息系(IS) 中年龄小于20 岁的学生的学号和年龄 GET W (Student.Sno,Student.Sage): Student.Sdept='IS'∧ Student.Sage<20
(3)带排序的检索 格式
GET 工作空间名(表达式1)[:操作条件] DOWN/UP 表达式2
- 23 -
《数据库系统概论》 第二章 关系数据库 讲义
[例4]查询计算机科学系(CS)学生的学号、年龄,结果按年龄降序排序 GET W (Student.Sno,Student.Sage):
Student.Sdept='CS‘ DOWN Student.Sage (4)带定额的检索 格式
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 (5)用元组变量的检索 元组变量的含义
表示可以在某一关系范围内变化(也称为范围变量Range Variable) 元组变量的用途
① 简化关系名:设一个较短名字的元组变量来代替较长的关系名。 ② 操作条件中使用量词时必须用元组变量。 定义元组变量
格式:RANGE 关系名 变量名 一个关系可以设多个元组变量 (6) 用存在量词的检索
操作条件中使用量词时必须用元组变量 [例8] 查询选修2号课程的学生名字。 RANGE SC X
GET W (Student.Sname): RANGE Course CX GET W (SC.Sno): CX (CX.Cno=SC.Cno∧CX.Pcno='6')
用存在量词的检索(续)
X(X.Sno=Student.Sno∧X.Cno='2')
[例9] 查询选修了这样课程的学生学号,其直接先行课是6号课程。
- 24 -
《数据库系统概论》 第二章 关系数据库 讲义
[例10]查询至少选修一门其先行课为6号课程的学生名字 RANGE Course CX
SC SCX GET W (Student.Sname): 前束范式形式:
GET W (Student.Sname):
(7)带有多个关系的表达式的检索
[例11] 查询成绩为90分以上的学生名字与课程名字。 RANGE SC SCX
GET W(Student.Sname,Course.Cname): SCX (SCX.Grade≥90 ∧
SCX.Sno=Student.Sno∧ Course.Cno=SCX.Cno) (8)用全称量词的检索
[例12] 查询不选1号课程的学生名字 RANGE SC SCX
GET W (Student.Sname):
SCX (SCX.Sno≠Student.Sno∨SCX.Cno≠'1') 用存在量词表示: RANGE SC SCX
GET W (Student.Sname): ?
(9)用两种量词的检索
[例13] 查询选修了全部课程的学生姓名。 RANGE Course CX
SC SCX GET W (Student.Sname):
SCX (SCX.Sno=Student.Sno∧SCX.Cno='1')
SCX CX.Cno=SCX.Cno∧CX.Pcno='6')
SCX (SCX.Sno=Student.Sno∧ CX (CX.Cno=SCX.Cno∧CX.Pcno='6'))
CX (SCX.Sno=Student.Sno∧
- 25 -