1
第 4章 关系模型
2
? 上一章介绍了 三种 主要的数据模型:
? 层次模型
? 网状模型
? 关系模型
? 其中 关系模型 简单灵活,并有着坚实的理论基础,已成为当前 最流
行 的数据模型。
? 本章主要讲述,
? 关系模型的数据结构
? 关系的定义和性质
? 关系数据库的基本概念
? 关系运算
3
2.1 关系模型
? 关系模型就是用 二维表格 结构来表示实体及实体之间
联系的模型 。
? 关系模型是各个关系的框架的集合, 即关系模型是一
些 表格的格式, 其中包括关系名, 属性名, 关键字等 。
? 教师关系T
? 课程关系 C 授课关系 SC
教师 — 课程数据库的关系模型
TNO
教师号
TN
姓名
SEX
性别
AGE
年龄
PROF
职称
SAL
工资
COMM
岗位津贴
DEPT
系别
CNO
课程号
CN
课程名
CT
课时
TNO
教师号
CNO
课程号
4
? 从各个关系的框架中, 我们可以很容易看出哪两个关
系之间有 联系 。 例如:
? 教师关系和授课关系有公共的属性, 教师号,, 则表明这两
个关系有联系 。
? 而课程关系和授课关系有公共的属性, 课程号,, 则表明这
两个关系也有联系 。
? 至于元组之间的联系, 则与具体的数据有关 。 只有在公共属
性上具有相同属性值的元组之间才有联系 。
5
? 由上例可以看出, 在一个关系中可以存放两类信息:
? 一类是描述实体本身的信息
? 一类是描述实体 ( 关系 ) 之间的联系的信息
? 在层次模型和网状模型中, 把有联系的实体 ( 元组 ) 用
指针链接起来, 实体之间的联系是通过 指针 来实现的 。
? 而关系模型则采用不同的思想, 即用 二维表 来表示实体
与实体之间的联系, 这就是关系模型的本质所在 。
? 所以, 在建立 关系模型 时, 只要把的所有的实体及其属
性用关系框架来表示, 同时把实体之间的关系也用关系
框架来表示, 就可以得到一个关系模型 。
? 如上例中的教师 — 课程数据库的关系模型就是这样建立的 。
6
2.2 关系的定义
? 在关系模型中, 数据是以二维表的形式存在的, 这个
二维表 就叫做 关系 。
? 关系理论 是以 集合代数 理论为基础的, 因此, 我们可
以用集合代数给出二维表的, 关系, 定义 。
? 为了从集合论的角度给出关系的定义, 我们先引入 域
和 笛卡尔积 的概念 。
7
2.2.1 域 ( Domain)
? 域是一组具有相同数据类型的值的集合, 又称为 值域 。
( 用 D表示 )
? 例如整数, 实数, 字符串的集合 。
? 域中所包含的值的个数称为域的 基数 ( 用 m表示 ) 。
? 关系中用域表示属性的取值范围 。 例如:
D1={李力, 王平, 刘伟 } m1=3
D2={男, 女 } m2=2
D3={47,28,30} m3=3
? 其中, D1,D2,D3为域名, 分别表示教师关系中姓名, 性别,
年龄的集合 。
? 域名无排列次序, 如 D2={男, 女 }={女, 男 }
8
笛卡尔积 (Cartesian Product )
? 给定一组域 D1,D2,…, Dn(它们可以包含相同的
元素,即可以完全不同,也可以部分或全部相同)。
D1,D2,…, Dn的笛卡尔积为
D1× D2× …… × Dn={( d1,d2,…, dn) |di∈ Di,
i=1,2,…, n}。
?由定义可以看出,笛卡尔积也是一个 集合 。
例如:上述表示教师关系中姓名、性别两个域的笛卡尔积为:
D1={李力,王平,刘伟 }
D2={男,女 }
D1× D2={(李力,男),(李力,女),(王平,男),
(王平,女),(刘伟,男),(刘伟,女) }
9
笛卡尔积 (Cartesian Product )
? 给定一组域 D1,D2,…, Dn(它们可以包含相同的元素,
即可以完全不同,也可以部分或全部相同)。 D1,D2,…,
Dn的笛卡尔积为 D1× D2× …… × Dn={( d1,d2,…, dn)
|di∈ Di,i=1,2,…, n}。
? 其中:
1,元素中的每一个 di叫做一个分量 (Component),来自相应的
域( di∈ Di)
2,每一个元素( d1,d2,d3,…, dn)叫做一个 n元组( n-
tuple),简称元组( Tuple)。但元组不是 di的集合,元组
的每个分量( di)是按序排列的。如:
?( 1,2,3) ≠( 2,3,1) ≠( 1,3,2)
?而集合中的元素是没有排序次序的,如( 1,2,3) =
( 2,3,1) =( 1,3,2)。
其中:李力、王平、刘伟、男、女都是分量
(李力,男),(李力,女)等是元组
10
3,若 Di( i=1,2,…… n) 为有限集, Di中的集合元素个数称为 Di
的 基数, 用 mi ( i=1, 2, …… n ) 表示, 则 笛 卡 尔 积
D1× D2× …… × Dn的基数 M( 即元素 ( d1,d2,…… dn) 的个数 )
为所有域的基数的累积, 即
M=
例如:上述表示教师关系中姓名, 性别两个域的笛卡尔积为:
?D1× D2={( 李力, 男 ), ( 李力, 女 ), ( 王平, 男 ), ( 王
平, 女 ), ( 刘伟, 男 ), ( 刘伟, 女 ) }
其中:
?其基数 M=m1× m2=3*2=6
?元组的个数为 6
?
?
n
i
im
1
11
4,笛卡尔积可用二维表的形式表示 。
例如, 上述的 6个元组可表示成表 2.1。
D1和 D2的笛卡尔积
? 由上例可以看出, 笛卡尔积实际是一个二维表, 表的框架由
域构成, 表的任意一行就是一个元组, 表中的每一列来自同
一域, 如第一个分量来自 D1,第二个分量来自 D2。
姓名 性别
李力 男
李力 女
王平 男
王平 女
刘伟 男
刘伟 女
12
2.2.3 关系( Relation)
? 笛卡尔积 D1× D2× … × Dn的任一子集称为定义在域
D1,D2,…Dn 上的 n元关系( Relation),可用 R
( D1,D2……Dn )表示
如上例 D1× D2笛卡尔积的子集可以构成教师关系 T1,
姓名 性别
李力 男
王平 女
刘伟 男
几点说明:
1,R为关系名,n称为关系的目或
度( Degree)。
?当 n=1时,称为 单元 关系。
?当 n=2时,称为 二元 关系。
?…
?当 n=n时,称为 n元 关系。
?如上例为二元关系,关系名为 T。
13
2,关系中元组个数是关系的基数 。 如 ( 李力, 男 ), ( 王平, 女 ),
( 刘伟, 男 ) 为三个元组, 关系T的基数为 3。
? 如果一个关系的元组个数是无限的, 则称为无限关系;
? 如果一个关系的元组个数是有限的, 则称为有限关系 。
? 由于计算机存储系统的限制, 我们一般不去处理无限关系, 而只考虑有
限关系 。
3,同样可以把关系看成一个二维表 。 其中,
( 1) 表的框架由域 Di( i=1,2,…… n) 构成;
( 2) 表的任意一行对应一个元组;
( 3) 表的每一列来自同一域;
( 4) 域可以相同, 为了加以区别, 每列起一个名字, 称为 属性, n目关系
有 n个属性, 属性的名字唯一, 属性的取值范围 Di( i=1,2,…, n) 称
为 值域
( 5) 具有相同关系框架的关系成为同类关系, 例如, 有另一个关系 T2,
如表 2.3所示:
T1和 T2是同类关系 。
姓名 性别
张雪 女
张兰 女
14
? 4,数学上关系是笛卡尔积的任意子集,但在实际应用中
关系是笛卡尔积中所取的有意义的子集。例如在表 2.1中
选取一个子集构成如下关系,显然不符合实际情况
姓名 性别
李力 男
李力 女
15
2.3 关系的性质
? 尽管关系与二维表格、传统的数据文件是非常类似的,
但它们之间又有重要的区别。
? 严格地说,关系是种规范化了的二维表中行的集合,
为了使相应的数据操作简化,在关系模型中,对关系
作了种种限制,关系具有如下特性:
1,关系中不允许出现相同的元组 。
2,关系中元组的顺序(即行序)是无关紧要的,在一
个关系中可以任意交换两行的次序。根据关系的这
个性质,可以改变元组的顺序使其具有某种排序,
然后按照顺序查询数据,可以提高查询速度。
16
3,关系中属性的顺序是无关紧要的,即列的顺序可以任
意交换。交换时,应连同属性名一起交换,否则将得到
不同的关系。
?例如:关系 T1作如下交换时,无任何影响
性别 姓名
男 李力
女 王平
男 刘伟
17
? 而作如下交换时,不交换属性名,只交换属性列中的
值,则得到不同的关系,如下表,
姓名 性别
男 李力
女 王平
男 刘伟
18
4,同一属性名下的各个属性值必须来自同一个域, 是同
一类型的数据 。
5,关系中各个属性必须有不同的名字,不同的属性可来
自同一个域, 即它们的分量可以取自同一个域 。
?例如, 有如下表中关系, 职业与兼职是两个不同的属性, 但它们
取自同一个域职业= { 教师, 工人, 辅导员 } 。
姓名 职业 兼职
张强 教师 辅导员
王丽 工人 教师
刘宁 教师 辅导员
19
6,关系中每一分量必须是不可分的数据项, 或者说所有
属性值都是原子的, 即是一个确定的值, 而不是值的
集合 。 属性值可以为空值, 表示, 未知, 或, 不可使
用,, 即不可, 表中有表, 。 满足此条件的关系称为
规范化关系, 否则称为 非规范化关系 。
?例如, 在表 1中, 籍贯含有省, 市/县两项, 出现了, 表中有表,
的现象, 则为非规范化关系, 而把籍贯分成省, 市/县两列, 将其
规范化, 如表 2所示 。
? 表 1 表 2
姓名 籍贯 姓名 省 市/县
省 市/县
张强 吉林 长春 张强 吉林 长春
王丽 山西 大同 王丽 山西 大同
20
2.4 关系的码
? 2.4.1 候选码与主码
? 能唯一标识关系中元组的属性或属性集,则称该属性
或属性集为 候选码 (Candidate Key),也称候选键。如
?,学生关系”中的学号能唯一标识每一个学生,则
属性学号是学生关系的候选码。
? 在“选课关系”中,只有属性的组合“学号 +课程
号”才能唯一地区分每一条选课记录,则属性集
“学号 +课程号”是选课关系的候选键。
21
下面给出候选码的形式化定义:
? 设关系 R有属性 A1,A2,…… An,其属性集 K=( Ai,
Aj,…… Ak), 当且仅当满足下列条件时, K被称为
候选码:
1,唯一性 ( Uniqueness), 关系 R的任意两个不同元组, 其属
性集 K的值是不同的 。
2,最 小性 ( Minimally ), 组成关 系键的 属性集 ( Ai,
Aj,…… Ak) 中, 任一属性都不能从属性集 K中删掉, 否则将
破坏唯一性的性质
? 例如:, 学生关系, 中的每个学生的学号是唯一的,, 选课关
系, 中, 学号 +课程号, 的组合也是唯一的 。 对于属性集, 学
号 +课程号, 去掉任一属性, 都无法唯一标识选课记录 。
22
? 如果一个关系中有多个候选码, 可以从中选择一个作为
查询, 插入或删除元组的操作变量, 被选用的候选键称
为 主码 (Primary Key),或称为 主键, 关键字 。
? 例如, 假设在学生关系中没有重名的学生, 则, 学号, 和, 姓
名, 都可作为学生关系的候选键 。 如果选定, 学号, 作为数据
操作的依据, 则, 学号, 为主关系键 。
? 主码是关系模型中的一个重要概念 。 每个关系必需选择
一个主码, 选定以后, 不能随意改变 。 每个关系必定有
且仅有一个主码, 因为关系的元组无重复, 至少关系的
所有属性的组合可作为主码 。
23
2.4.2 主属性与非主属性
? 主属性 ( Prime Attribute),包含在主码中的的各属
性称为主属性 。
? 非主属性 ( Non-Prime Attribute),不包含在任何候
选码中的属性称为非码属性 。
? 在最简单的情况下, 一个候选码只包含一个属性, 如
学生关系中的, 学号,, 教师关系中的, 教师号, 。
? 在最极终端的情况下, 所有属性的组合是关系的候选
码, 这时称为 全码 ( all-key) 。
24
? 下面是一个全码的例子:
? 假设图书馆有借书关系 TCS,分别有三个属性读者编号 ( T), 图
书编号 ( C) 和借阅时间 ( S) 。
? 在这种情况下, T,C,S三者之间是多对多关系, (T,C,S)三个属
性的组合是关系 TCS的候选码, 称为 全码, T,C,S都是主属性 。
T C S
T1 C1 ?2005-4-1?
25
2.4.3 外码 ( Foreign key)
如果关系 R2的一个或一组属性 X不是 R2的主码, 而是另一
关系 R1的主码, 则该属性或属性组 X称为关系 R2的 外码
或 外部关系键 。 并称关系 R2为 参照关系 (referencing
relation),关系 R1为 被参照关系 (referenced relation)。
?因此,“学号” 属性是选课关系的 外码 。学生关系为 被
参照关系,选课关系为 参照关系 。
26
? 由外部关系键的定义可知, 被参照关系的主码和参照
关系的外码必须定义在同一个域上 。
? 如选课关系中的, 学号, 与学生关系的主码, 学号, 定义在
同一个域上 。
27
关系模型及其定义
? 5)关系模式( Relation Schema):关系的描述称作关
系模式,包括关系名、关系中的属性名、属性向域的
映象、属性间的数据依赖关系等,其形式化描述为
R(U,D,dom,F),简记作 R(U)或 R(A1,A2,…,A n ) 。
R(U,D,DOM,F)
关系名 属性名集合
域的集合
属性向域
的映象
属性间数据
的依赖关系
28
? 属性向域的映象一般直接说明为属性的类型、长度等。
? 某一时刻对应某个关系模式的内容(元组的集合)称
作关系。
? 关系模式是型,是稳定的,静态的。关系是某一时刻
的值,是随时间不断变化的,是动态的。
R(U,D,DOM,F)
关系名 属性名集合
域的集合
属性向域
的映象
属性间数据
的依赖关系
29
? 关系数据库( Relation Database)
其型是关系模式的集合,即数据库描述
其值是某一时刻关系的集合
? 例如教学数据库中, 共有五个关系, 其关系模式分别
?学生 ( 学号, 姓名, 性别, 年龄, 系别 )
?教师 ( 教师号, 姓名, 性别, 年龄, 系别 )
?课程 ( 课程号, 课程名, 课时 )
?选课 ( 学号, 课程号, 成绩 )
?授课 ( 教师号, 课程号 )
30
? 在每个关系中,又有其相应的数据库的实例
? 例如:与学生关系模式对应的数据库中的实例有如下 6个元组:
S1 赵亦 女 17 计算机
S2 钱尔 男 18 信息
S3 孙珊 女 20 信息
S4 李思 男 21 自动化
S5 周武 男 19 计算机
S6 吴丽 女 20 自动化
31
2.4.4 关系模型的完整性
? 为了维护数据库中数据与现实世界的一致性, 对关系
数据库的插入, 删除和修改操作必须有一定的约束条
件, 这就是关系模型的三类完整性:
? 实体完整性
? 参照完整性
? 用户定义的完整性
1,实体完整性 (EntityIntegrity)
? 实体完整性 是指主码的值不能为空或部分为空。
? 关系模型中的一个元组对应一个实体,一个关系则对
应一个实体集。
? 例如,一条学生记录对应着一个学生,学生关系对应着学生
的集合。
32
? 现实世界中的实体是可区分的, 即它们具有某种唯一性
标识 。 与此相对应, 关系模型中以主码来唯一标识元组 。
? 例如, 学生关系中的属性, 学号, 可以唯一标识一个元组, 也
可以唯一标识学生实体 。
? 如果主码的值为空或部分为空, 即主属性为空, 则不符
合主码的定义条件, 不能唯一标识元组及与其相对应的
实体 。 这就说明存在不可区分的实体, 从而与现实世界
中的实体是可以区分的事实相矛盾 。 因此 主关系键的值
不能为空或部分为空 。
? 例如, 学生关系中的主关系键, 学号, 不能为空;选课关系中
的主关系键, 学号 +课程号, 不能部分为空, 即, 学号, 和, 课
程号, 两个属性都不能为空 。
33
2,参照完整性 (Referential integrity)
? 如果关系 R2的外码 X与关系 R1的主码相符,则 X的每个
值或者等于 R1中主码的某一个值, 或者取空值 。
SNO
学号
SN
姓名
SEX
性别
AGE
年龄
DEPT
所在系
S1 赵亦 女 17 计算机
S2 钱尔 男 18 信息

S11 王威 男 19
DEPT
所在系
ADDR
地址
计算机 1号楼
信息 1号楼
自动化 2号楼
S(学生关系) D(系别关系)
34
? 在下例中, 如果按照参照完整性规则, 选课关系中的
外码, 学号, 可以取空值或者取被参照关系中已经存
在的值 。 但由于, 学号, 是选课关系中主属性, 根据
实体完整性规则, 两个属性都不能为空 。 所以 选课关
系中的外码, 学号, 中只能取被参照关系中已经存在
的值 。
35
? 实体完整性 和 参照完整性 是关系模型必须满足的完整
性约束条件, 系统都应该支持这两类完整性 。
? 除此之外, 不同的关系数据库系统由于应用环境的不
同, 往往还需要一些特殊的约束条件, 这就是 用户定
义完整性 。
36
3,用户定义完整性 ( User-defined Integrity)
? 用户定义完整性 是针对某一具体关系数据库的约束条
件 。
? 它反映某一具体应用所涉及的数据必须满足的语义要
求 。
? 例如, 属性值根据实际需要, 要具备一些约束条件,
如选课关系中成绩不能为负数;某些数据的输入格式
要有一些限制等 。 关系模型应该提供定义和检验这类
完整性的机制, 以便用统一的, 系统的方法处理它们,
而不要由应用程序承担这一功能 。
37
关系模型及其定义
? 关系操作
? 关系操作是集合操作,操作的对象及结果都是集合,是一次
一集合( Set-at-a-time)的方式。而非关系型的数据操作方式
是一次一记录( Record-at-a-time)。
? 关系操作语言的种类
关系数
据语言
关系代
数语言
关系演
算语言
具有关系代数和关系
演算双重特点的语言
元组关系演算语言
域关系演算语言
ISBL(Information System Base Language)
APLHA
QBE
SQL
38
? 关系模型与其他模型相比,最有特色的是它的 数据库
语言 。
? 这种语言灵活方便、表达能力和功能都很强。
? 目前关系数据库所使用的语言一般都具有 定义, 查询,
更新 和 控制 一体化的特点,而 查询 是最主要的部分。
? 所以说,关系数据库的核心部分是 查询,故又称为 查
询语言,而查询的条件要使用 关系运算表达式 来表示。
? 因此,关系运算是设计关系数据语言的基础。
? 按表达查询的方法不同,关系运算可分为 关系代数 和
关系演算 两大类。
2.6 关系代数
39
2.6.1 关系代数的分类及其运算符
? 关系代数是对关系进行集合代数运算, 是基于关系代
数的操作语言, 称为 关系代数语言, 简称关系代数 。
? 它 是 由 IBM 在 一 个 实 验 性 的 系 统 上 实 现 的, 称为
ISBL(Information System Base Language)语言 。
? ISBL的每个语句都类似于一个关系代数表达式 。
? 关系代数的 运算对象 是 关系, 运算结果 也是 关系, 关
系代数用到的运算符主要包括四类:
? 集合运算符, ∪ ( 并 ), -( 差 ), ∩( 交 ), X( 广义笛卡尔
积 ) ;
? 专门的关系运算符, σ(选择 ),∏( 投影 ), ∞( 连接 ), *
( 自然连接 ), ÷ ( 除 ) ;
? 算术比较运算符, >( 大于 ), ≥( 大于等于 ), <( 小于 ),
≤( 小于等于 ), =( 等于 ), ≠( 不等于 ) ;
? 逻辑运算符, ∧ ( 与 ),∨ ( 或 ),┐( 非 )
40
关系代数的运算按运算符的不同主要分为两类:
? 传统的集合运算,把关系看成元组的集合, 以元组作
为集合中元素来进行运算, 其运算是从关系的, 水平,
方向即行的角度进行的 。 包括 ∪ ( 并 ), -( 差 ), ∩
( 交 ), X( 广义笛卡尔积 ) ;
? 专门的关系运算,不仅涉及行运算, 也涉及列运算,
这种运算是为数据库的应用而引进的特殊运算 。 包括
σ(选择 ),∏( 投影 ), ∞( 连接 ), *( 自然连接 ),
÷ ( 除 )
41
2.6.2 传统的集合运算
? 传统的集合运算是二目运算, 是在两个关系中进行的 。
但是并不是任意的两个关系都能进行这种集合运算,
而是要在两个满足一定条件的关系中进行运算 。 那么,
对关系有什么要求呢? 下面先看一个定义 。
? 定义 2.9设给定两个关系 R,S,若满足:
1) 具有相同的度 n;
2) R中第 i个属性和 S中第 i个属性必须来自同一个域 。 则说关系 R、
S是相容的 。
3) 除笛卡尔积外, 要求参加运算的关系必须满足上述的相容性
定义 。
42
1,并 ( Union)
?关系 R和关系 S的并由属于 R或属于 S的元组组成, 即
R和 S的所有元组合并, 删去重复元组, 组成一个新
关系, 其结果仍为 n目关系 。 记作:
R∪ S={t|t∈ R∨ t∈ S}
?对于关系数据库, 记录的插入
和添加可通过并运算实现 。
R?S
43
2,差 ( Difference)
?关系 R与关系 S的差由属于 R而不属于 S的所有元组组
成, 即 R中删去与 S中相同的元组, 组成一个新关系,
其结果仍为 n目关系 。 记作:
R-S={t|t∈ R∧ ┐t∈ S}
?通过差运算, 可实现关系数据库
记录的删除 。
R?S
44
3,交 ( Intersection)
?关系 R与关系 S的交由既属于 R又属于 S的元组组成,
即 R与 S中相同的元组, 组成一个新关系, 其结果仍
为 n目关系 。 记作:
R∩S={t|t∈ Rt∈ S}
?如果两个关系没有相同的元组, 那么它们的交为空 。
?两个关系的并和差运算为基本运算 ( 即不能用其他
运算表达的运算 ), 而交运算为非基本运算, 交运
算可以用差运算来表示,R∩S=R-(R-S)
R?S
45
4,广义笛卡尔积 ( Extended Cartesian Product)
?两个分别为 n目和 m目关系 R和 S的广义笛卡尔积是
一个 ( n+m) 列的元组的集合, 元组的前 n列是关系
R的一个元组, 后 m列是关系 S的一个元组 。 若 R有
k1个元组, S有 k2个元组, 则关系 R和关系 S的广义笛
卡尔积有 k1*k2个元组, 记作
R× S={tr⌒ ts| tr∈ R,∧ ts∈ S}
?关系的广义笛卡尔积可用于两关系的连接操作 ( 连
接操作将在一节中介绍 ) 。
46
广义笛卡儿积运算实例
47
2.6.3 专门的关系运算
? 由于传统的集合运算, 只是从行的角度进行, 而要灵
活地实现关系数据库多样的查询操作, 必须引入专门
的关系运算 。
? 在讲专门的关系运算之前, 为叙述上的方便先引入几
个概念 。
( 1) 设关系模式为 R(A1,A2,…… An),它的一个关
系为 R,t∈ R表示 t是 R的一个元组, t[Ai]则表示元
组 t中相应于属性 Ai的一个分量 。
48
( 2 ) 若 A={Ai1,Ai2,……, Aik}, 其中 Ai1,Ai2,……,Aik是
A1,A2,……, An中的一部分, 则 A称为属性列或域列, ?
则表示 {A1,A2,……, An}中去掉 {Ai1,Ai2,……, Aik}后剩
余的属性组 。 t[A]={t[Ai1],t[Ai2],……,t[Aik]}表示元组 t在
属性列 A上诸分量的集合 。
( 3) R为 n目关系, S为 m目关系, tr∈ R,ts∈ S,trts称为元组
的连接 (concatenation),它是一个 n+m列的元组, 前 n个分
量为 R的一个 n元组, 后 m个分量为 S中的一个 m元组 。
( 4)给定一个关系 R( X,Z),X和 Z为属性组,定义当
t[X]=x时,x在 R中的象集 (image set),为
Zx={t[Z]|t∈ R,t[X]=x},它表示 R中的属性组 X上值为 x的诸
元组在 Z上分量的集合。
49
样板数据库 (学生 -课程数据库 )
50
1,选取 ( Selection)
? 选取运算是单目运算, 是根据一定的条件在给定的关
系 R中选取若干个元组, 组成一个新关系, 记作:
σF(R)={t|t∈ R∧ F(t)为真 }
? 其中, σ为选取运算符, F为选取的条件, 它由运算对
象 ( 属性名, 常数, 简单函数 ), 算术比较运算符
( >, ≥,<,≤,=,≠) 和逻辑运算符 ( ∨ ∧ ┐) 连
接起来的逻辑表达式, 结果为逻辑值, 真, 或, 假, 。
? 选取运算实际上是从关系 R中选取使逻辑表达式为真
的元组, 是从行的角度进行的运算 。
51
52
2,投影 ( Projection)
? 投影运算也是单目运算, 关系 R上的投影是从 R中选择出
若干属性列, 组成新的关系, 即对关系在垂直方向进行的
运算, 从左到右按照指定的若干属性及顺序取出相应列,
删去重复元组 。 记作,ΠA(R)={t[A]|t∈ R}
? 其中 A为 R中的属性列, Π为投影运算符 。
? 从其定义可看出,投影运算是从列的角度进行的运算,这
正是选取运算和投影运算的区别所在。选取运算是从关系
的水平方向上进行运算的,而投影运算则是从关系的垂直
方向上进行的。
53
? 投影运算可以改变关系的属性次序
54
例 4 查询教师关系中有哪些系 。
ΠSNO(SC)
? 结果如右图所示
? 由例 4可以看出, 投影后取消了某些属性列后, 就可能
出现重复行, 应该取消这些完全相同的行 。 所以投影
之后, 不但减少了属性, 元组也可能减少, 新关系与
原关系不相容 。
SNO
95001
95001
95001
55
例 2.8 查询选项了 1课程的学生号 。
ΠSNO(σCNO=’1’(SC))
? 结果如右图所示 。
? 本例中选取运算和投影运算相结合, 先在选课表中选
取满足条件的元组, 再于 SNO属性上进行投影 。
SNO
95001
56
3,连接 ( Join)
? 连接运算是二目运算, 是从两个关系的笛卡尔积中选
取满足连接条件的元组, 组成新的关系 。
? 设关系 R( A1,A2,……A n)及 S( B1,B2,……B m),连接
属性集 X包含于 {A1,A2,……A n},及 Y包含于
{B1,B2,……B m},X与 Y中属性列数目相等,且相对应
属性有共同的域。 [若 Z={A1,A2……A n}/X (/X:去掉 X之
外的属性 ) 及 W={B1,B2……B m}/Y,则 R及 S可表示为
R(Z,X),S(W,Y)]
? 关系 R和 S在连接属性 X和 Y上的连接,就是以 R× S笛
卡尔积中,选取 X属性列上的分量与 Y属性列上的分量
满足给定 θ比较条件的那些元组,也就是在 R× S上选
取在连接属性 X,Y上满足 θ条件的子集,组成新的关系。
新关系的度为 n+m。
57
记作,R∞S={t r⌒ ts |tr∈ R∧ ts∈ S∧ tr[X]θts[Y]为真 }
XθY
? 其中, ∞是连接运算符, θ为算术比较运算符, 也称 θ连
接;
? XθY为连接条件;
? θ为, =”时, 称为等值连接;
? θ为, <”时, 称为小于连接;
? θ为, >”时, 称为大于连接 。
? 连接运算为非基本运算, 可以用选取运算和广义笛卡尔
积运算来表示:
R∞S=σxθy(R× S)
58
? 在连接运算中, 一种最常用的连接是自然连接 。
? 所谓自然连接就是在等值连接的情况下, 当连接属性
X与 Y具有相同属性组时, 把在连接结果中重复的属性
列去掉 。 即如果 R与 S具有相同的属性组 Y,则自然连
接可记作:
R*S={t r⌒ ts |tr∈ R∧ ts∈ S∧ tr[Y]=ts[Y]}
? 自然连接是在广义笛卡尔积 R× S中选出同名属性上符
合相等条件元组, 再进行投影, 去掉重复的同名属性,
组成新的关系 。
59
例 2.9 如图 2.9(a),(b)所示的两个关系 R与 S,(c)为 R和 S的
大于连接 ( C>D), (d)为 R和 S的等值连接 ( C=D),
(e)为 R和 S的等值连接 ( R.B=S.B), (f)为 R和 S的自然
连接 。
R S
(a) (b)
A B C B D
a1 b1 2 b1 5
a1 b2 4 b2 6
a2 b3 6 b3 7
a2 b4 8 b3 8
60
大于连接( C>D) 等值连接( C=D)
(c) (d)
A R.B C S.B D A R.B C S.B D
a2 b3 6 b1 5 a2 b3 6 b2 6
a2 b4 8 b1 5 a2 b4 8 b3 8
a2 b4 8 b2 6
a2 b4 8 b3 7
61
等值连接 (R.B=S.B) 自然连接
(e) (f)
图 2.9 连接运算举例
A R.B C S.B D A B C D
a1 b1 2 b1 5 a1 b1 2 5
a1 b2 4 b2 6 a1 b2 4 6
a2 b3 6 b3 7 a2 b3 6 7
a2 b3 6 b3 8 a2 b3 6 8
62
结合上例, 我们可以看出 等值连接与自然连接的区别,
? 1,等值连接中不要求相等属性值的属性名相同, 而自然
连接要求相等属性值的属性名必须相同, 即两关系只有
在同名属性才能进行自然连接 。 如上例 R中的 C列和 S中
的 D列可进行等值连接, 但因为属性名不同, 不能进行
自然连接 。
? 2,等值连接不将重复属性去掉, 而自然连接去掉重复属
性, 也可以说, 自然连接是去掉重复列的等值连接 。 如
上例 R中的 B列和 S中的 B列进行等值连接时, 结果有两
个重复的属性列 B,而进行自然连接时, 结果只有一个属
性列 B。
63
例 2.10 查询讲授数据库课程的教师姓名 。
ΠTN(σCN=’数据库 ’ (C)*ΠTNO,CNO(TC)*ΠTNO,TN(T))或
ΠTN(ΠTNO(σCN=’数据库 ’ (C)*TC)*ΠTNO,TN(T))
? 结果如右图所示 。
TN
王平
刘伟
张兰
64
4,除法 (Division)
? 除法运算是二目运算, 设有关系 R( X,Y) 与关系 S
( Y,Z), 其中 X,Y,Z为属性集合, R中的 Y与 S中
的 Y可以有不同的属性名, 但对应属性必须出自相同
的域 。 关系 R除以关系 S所得的商是一个新关系 P( X),
P是 R中满足下列条件的元组在 X上的投影:元组在 X
上分量值 x的象集 Yx包含 S在 Y上投影的集合 。 记作:
R÷ S={tr[X]|tr∈ R∧ Πy(S)?Yx}
? 其中, Yx为 x在 R中的象集, x= tr[X]。
? 除法运算为非基本运算, 可以表示为:
R÷ S=Πx(R)- Πx(Πx(R)× S- R)
65
关系代数
? 除 (Division)
?象集:给定一个关系 R(X,Y),X和 Y为属性组。当
t[X]=x时,x在 R中的象集为:
Yx={t[Y]| t?R,t[X]=x}
?除:给定关系 R(X,Y)和 S(Y,Z),其中 X,Y,Z 为属
性组。 R中的 Y和 S中的 Y可以有不同的名字,但必
须取自同一个域,R与 S除得到一个新关系 P(X),P是
R中满足下列条件的元组在 X属性列上的投影:元组
在 X上分量值 x的象集 Yx包含 S在 Y上投影的集合。
记作:
R ?S={tr[X]| tr?R??y(S)? Yx}
66
象集
A B C D E
a1 b1 5 d1 3
a1 b1 5 d2 7
a1 b2 5 d3 10
a2 b3 5 d3 2
a4 b5 6 d2 7
a4 b5 6 d3 10
a4 b5 6 d3 2
a6 b6 6 d5 2
(a1,b1)的象
C D E
5 d1 3
5 d2 7
(a1,b2)的象
C D E
5 d3 10
(a4,b5)的象
C D E
6 d2 7
6 d3 10
6 d3 2
X Y
67

A B C D E
a1 b1 5 d1 3
a1 b1 5 d2 7
a1 b2 5 d3 10
a2 b3 5 d3 2
a2 b1 5 d5 2
a3 b2 6 d1 3
a4 b5 6 d2 7
a4 b5 6 d3 10
a4 b5 6 d3 2
a6 b6 6 d5 2
X Y
(a4,b5)=
C D E F
6 d2 7 fa
6 d3 10 fb
6 d3 2 fc
Y
?
R上分量值 X 的象集 Yx包含 S在 Y上的投影
68
4.2关系代数
? 关系除法运算的步骤:
1) 将被除关系属性分为象集属性和结果属性
2) 对象集属性进行投影 — 目标数据集
3) 将被除关系分组:结果属性值一样的元组分为一

4) 找出结果集
69
除运算实例
学号 课号 成绩
S1 C1 A
S1 C2 B
S1 C3 B
S2 C1 A
S2 C3 B
S3 C1 B
S3 C3 B
S4 C1 A
S4 C2 A
S5 C2 B
S5 C3 B
S5 C1 A
?
课号 课名
C1 数据结构
C3 操作系统
S1 C1 A
S1 C2 B
S1 C3 B
S2 C1 A
S2 C3 B
S3 C1 B
S3 C3 B
S4 C1 A
S4 C2 A
S5 C2 B
S5 C3 B
S5 C1 A
C1 数据结构
C3 操作系统
S1 C2 B
S1 C3 B
S2 C1 A
S2 C3 B
S3 C1 B
S3 C3 B
S4 C1 A
S4 C2 A
S5 C2 B
S5 C3 B
S5 C1 A
= S3 B
选课
必修课
选择了所有必修课表 中的课程
的学生的学号和成绩
70
小 结
? 关系数据库系统 是目前使用最广泛的数据库系统,本
书的重点也是讨论关系数据库系统。
? 本章系统地介绍了关系数据库的一些基本概念,其中
包括关系模型的数据结构、关系的完整性及其关系操
作。
71
? 关系演算是以数理逻辑中的谓词演算为基础的, 通过
谓词形式来表示查询表达式 。
? 根据谓词变元的不同, 可将关系演算分为元组关系演
算和域关系演算 。
2.7.1 元组关系演算语言
? 元组关系演算 是以元组变量作为谓词变元的基本对象。
? 元组关系演算语言的典型代表是 E.F.Codd提出的
ALPHA语言,这种语言虽然没有实际实现,但较有
名气,INGRES关系数据库上使用的 QUEL语言,就
是在 ALPHA语言的基础上研制的。
? 这里主要介绍 ALPHA语言和 QUEL语言
2.7 关系演算
72
2.7.1.1 ALPHA语言
? ALPHA语言是以 谓词公式 来定义查询要求的 。 在谓词
公式中存在客体变元, 这里称为 元组变量 。
? 元组变量是一个变量, 其变化范围为某一个命名的关
系 。
? ALPHA语言的基本格式是:
<操作符 > <工作空间名 > (<目标表 >)[:<操作条件 >]
? 操作符 有 GET,PUT,HOLD,UPDATE,DELETE,
DROP等到种 。
? 工作空间 是指内存空间, 可以用一个字母表示, 通常
用 W表示, 也可以用别的字母表示 。 工作空间是用户
与系统的通信区 。
? 目标表 用于指定操作 ( 如查询, 更新等 ) 出来的结果,
它可以是关系名或属性名, 一答操作语句可以同时对
多个关系或多个属性进行操作 。
73
? 操作条件 是用谓词公式表示的逻辑表达式, 只有满足
此条件的元组才能进行操作, 这是一个可选项, 缺省
时表示无条件执行操作符规定的操作 。 除此之外, 还
可以在基本格式上加上排序要求, 定额要求等 。
下面以教学数据库 ( 图 1.12) 为例, 说明 ALPHA语言的使用 。
1,数据查询
( 1) 简单查询
例 查询所有学生的数据 。
GET W (S)
? GET语句的作用是把数据库中的数据读入内存空间 W,
目标表为学生关系 S,代表查询出来的结果, 即所有的
学生 。
? 冒号后面的操作条件缺省, 表示无条件查询 。
74
例 2.13 查询所有被选修的课程号码 。
GET W (SC.CNO)
? 目标表为选课关系 SC中的属性 CNO,代表所有被选修
的课程号码,查询结果自动消去重复行 。
( 2) 条件查询
? 由冒号后面的逻辑表达式给出查询条件, 在表达式中
可以使用如下三类运算符:
① 比较运算符,>,≥,<,≤,=等于, ≠;
② 逻辑运算符,∧ ( 与 ),∨ ( 或 ),┐( 非 )
③ 表示执行次序的括号,( )
? 其中, 比较运算符的优先级高于逻辑运算符, 可以使
用 ( ) 改变它们的优先级 。
75
例 2.14 查询计算机系工资高于 1000元的教师的姓名和工
资 。
GET W (T.TN,T.SAL):T.DEPT=’计算机 ’ ∧ T.SAL>1000
? 目标表为教师关系 T中的两个属性 SN和 SAL组成的属
性列表 。
( 3) 排序查询
例 2.15 查询 S3同学所选课程号及成绩, 并按成绩降序排
列 。
GET W (SC.CNO,SC.SCORE):SC.SNO=’S3’DOWN SC.SCORE
? DOWN表示降序, 后面紧跟排序的属性名 。
? 升序排列时使用 UP。
76
( 4) 定额查询
例 2.15 查询一名男教师的教师号和姓名 。
GET W (1) (T.TNO,T.TN):T.SEX=’男 ’
? 所谓的定额查询就是通过在 W后面的括号中加上定额
数量, 限定查询出元组的个数 。
? 这里 (1)表示查询结果中男教师的个数, 取出教师表中
第一个男教师的教师号和姓名 。
? 排序和定额查询可以一起使用 。
例 2.16 查询一名男教师的教师号和姓名, 并使他的年龄
最小 。
GET W (1) (T.TNO,T.TN):T.SEX=’男 ’ UP T.AGE
? 此语句的执行过程为:先查询所有男教师的教师号和
姓名,再按照年龄由小到大排序,然后找出第一位,
也就是年龄最小的男教师。
77
( 5) 带元组变量的查询
? 所谓的 元组关系演算 就是以元组变量作为谓词变元的
基本对象, 在关系演算的查询操作时, 可以在相应的
关系上定义元组变量 。
? 元组变量 代表关系中的元组, 其取值是在所定义的关
系范围内变化, 所以也称作范围变量 Range Variable,
一个关系可以设多个元组变量 。
例 2.17 查询 S3同学所选课程号 。
RANGE SC X
GET W (X.CNO):X.SNO=’S3’
? 使用 RANGE来说明元组变量, X为关系 SC上的元组变
量 。
? 如果关系的名字很长, 使用起来不方便, 这时可以设
一个名字较短的元组变量来代替关系名, 简化关系名,
使操作更加方便 。
78
( 6) 带存在量词的查询
例 2.18 查询 S3同学所选课程名 。
RANGE SC X
GET W (C.CN):?X(C.CNO=X.CNO∧ X.SNO=’S3’)
? 注意:操作条件中使用量词时必须用元组变量 。
例 2.19 查询至少选修一门其课时数为 80的课程的学生的
姓名 。
RANGE C CX
SC SCX
GET W
(S.SN):?SCX(SCX.SNO=S.SNO∧ ?CX(CX.CNO=SCX.CNO∧
CX.CT=80))
79
? 此查询涉及三个关系, 需要对两个关系 ( C和 SC) 作用
存在量词, 所以用了两个元组变量 。
? 此语句的执行过程为:先查询课时数为 80的课程号, 再
根据找到的课程号在关系 SC中查询其对应的学号, 然
后根据为些学号在关系 S中找到对应的学生姓名 。
例 2.20 查询选修全部课程的学生姓名 。
RANGE C CX
SC SCX
GET W
(S.SN):?CX?SCX(XSC.SNO=S.SNO∧ CX.CNO=SCX.CNO)
80
( 7) 库函数查询
? 库函数也称集函数 。 用户在使用查询语言时, 经常要
作一些简单的运算 。
? 例如要统计某个关系中符合某一条件的元组数, 或某
些元组在某个属性上分量的和, 平均值等等 。
? 在关系数据库语言中提供了有关这类运算的标准函数,
增强了基本检索能力 。
? 常用的库函数下表所示
函数名称 功能
AVG 按列计算平均值
TOTAL 按列计算值的总和
MAX 求一列中的最大值
MIN 求一列中的最小值
COUNT 按列值计算元组个数
81
例 2.21 求学号为 S1学生的平均分 。
GET W (AVG(SC.SCORE):S.SNO=’S1’
例 2.22 求学校共有多少个系
GET W (COUNT(S.DEPT))
? COUNT 函数自动消去重复行, 可 计 算 字 段
,DEPT“不同值的数目 。
2,数据更新
? 更新操作包括修改, 插入和删除 。
( 1) 修改
? 修改操作使用 UPDATE语句实现, 具体操作分为以下
三步:
82
① 读数据:使用 HOLD语句将要修改的元组从数据库中
读到工作空间中;
② 修改:利用宿主语言修改工作空间中元组的属性;
③ 送回:使用 UPDATE语句将修改后的元组送回数据库
中 。
? 这里 HOLD语句是带上并发控制的 GET语句。
例 2.23 把刘伟教师转到信息系 。
HOLD W(T.DEPT):T.TN=‘刘伟 ’
MOVE ’信息 ’ TO W.DEPT
UPDATE W
? 在 ALPHA语言中, 不允许修改关系的主码, 例如不能
使用 UPDATE语句修改教师表 T中的教师号 。
? 如果要修改主码, 应该先使用删除操作删除该元组,
再插入一条具有新主码值的元组 。
83
( 2) 插入
? 插入操作使用 PUT语句实现, 具体操作分为以下两步:
① 建立新元组:利用宿主语言在工作空间中建立新元组;
② 写数据:使用 PUT语句将元组写入到指定的关系中 。
例 2.24 在 SC表中插入一条选课记录 ( S6,C1,85) 。
MOVE S6 TO W.SNO
MOVE C1 TO W.CNO
MOVE 85 TO W.SCORE
PUT W(SC)
84
? PUT语句的作用是把工作空间 W中的数据写到数据库
中, 此例即把已经在工作空间建立的一条选课记录写
入到选课关系 SC中 。
? 注意,PUT语句只能对一个关系进行操作, 在插入操
作时, 拒绝接受主码相同的元组 。
( 3) 删除
? ALPHA语言中的删除操作不但可以删除关系中的一些
元组, 还可以删除一个关系 。
? 删除操作使用 DELETE语句实现, 具体操作分为以下
两步:
① 读数据:使用 HOLD语句将要删除的元组从数据库中读到工作
空间中;
② 删除:使用 DELETE语句删除该元组 。
85
例 2.25 删除学号为 S6的学生的信息 。
HOLD W(S):S.SNO=‘S6’
DELETE W
例 2.26 删除全部学生的信息 。
HOLD W(S)
DELETE W
2.7.1.2 QUEL语言
? INGRES是加利福尼亚大学研制的关系数据库管理系
统, QUEL语言是 INGRES系统的查询语言, 它以
ALHPA语言为基础, 具有较为完善的数据定义, 数据
查询, 数据更新, 数据控制等功能 。
? QUEL语言既可以作为独立的语言进行交互式操作,
也可以作为子语言嵌入到主语言中去 。
86
1,数据定义
? QUEL语言可以使用 CREATE语句定义一个新关系,
CREATE语句的一般格式为:
CREATE <关系名 > (<属性名 =数据类型及长度 >[,<属性名 =数据
类型及长度 >… ])
例 2.27 定义学生关系 S
CREATE S
(SNO=C8,SN=C20,AGE=I3,SEX=C2,DEPT=C20)
? 关系定义后可以由定义者撤消, 撤消关系使用语句
DESTROY
? 例如, 撤消学生关系 S可以写成,DESTROY S。
87
2,数据查询
? 查询语句的一般格式为:
RANGE OF t1 IS R1
RANGE OF t2 IS R2
……
RANGE OF tk IS Rk
RETRIEVE( 目标表 )
WHERE <条件 >
88
? 其中 t1,t2,… tk分别是定义在关系 R1,R2,Rk上的
元组变量 。
? 目标表为查询的目标属性 。
? 查询条件是一个逻辑表达式, 在表达式中可以使用如
下三类运算符:
① 比较运算符,>( 大于 ), ≥( 大于等于 ), <( 小于 ), ≤
( 小于等于 ), =( 等于 ), ≠( 不等于 ) ;
② 逻辑运算符,AND( 与 ),OR( 或 ),NOT( 非 )
③ 表示执行次序的括号,( )
? 其中,比较运算符的优先级高于逻辑运算符,可以使
用()改变它们的优先级。
89
例 2.28 查询计算机系工资高于 1000元的教师的姓名和工
资 。
RANGE OF TX IS T
RETRIEVE (TX.TN,TX.SAL)
WHERE TX.DEPT=’计算机 ’ ∧ TX.SAL>1000
例 2.29 查询讲授 C5课程的教师的姓名 。
RANGE OF TX IS T
RANGE OF TCX IS TC
RETRIEVE (TX.TN)
WHERE TX.TNO=TCX.TNO AND TCX.CNO=’C5’
90
3,数据更新
( 1) 修改
? 修改操作使用 REPLACE语句实现 。
例 2.30 把刘伟教师转到信息系 。
RANGE OF TX IS T
REPLACE( TX.DEPT=’信息 ’ )
WHERE TX.TN=‘刘伟 ’
( 2) 插入
? 插入操作使用 APPEND语句实现 。
例 2.31 在 SC表中插入一条选课记录 ( S6,C2,80) 。
APPEND TO SC(SNO=‘S6’,CNO=‘C2’,SCORE=80)
91
( 3) 删除
? 删除操作使用 DELETE语句实现 。
例 2.32 删除学号为 S6的学生的信息 。
RANGE OF SX IS S
DELETE SX
WHERE SX.SNO=‘S6’
2.7.2 域关系演算语言 QBE
? 域关系演算是关系演算的另一种形式 。
? 域关系演算是以元组变量的分量即域变量作为谓词变
元的基本对象 。
? 域关系演算语言的典型代表是 1975年由 IBM公司约克
城高级研究试验室的 M.M.Zloof提出的 QBE语言, 该
语言于 1978年在 IBM370上实现 。
92
? QBE是 Query By Example的缩写, 也称为示例查询,
它是一种很有特色的屏幕编辑语言, 其特点如下:
( 1) 以表格形式进行操作
? 每一个操作都由一个或几个表格组成, 每一个表格都显示在
终端的屏幕上, 用户通过终端屏幕编辑程序以填写表格的方
式构造查询要求, 查询结果也以表格的形式显示出来, 所以
它具有直观和可对话的特点 。
( 2) 通过例子进行查询
? 通过使用一些实例, 使该语言更易于为用户接受和掌握 。
( 3) 查询顺序自由
? 当有多个查询条件时,不要求使用者按照固定的思路和方式
进行查询,使用更加方便。
93
使用 QBE语言的步骤:
( 1) 用户根据要求向系统申请一张或几张表格, 显示在
终端上;
( 2) 用户在空白表格的左上角的一栏内输入关系名;
( 3) 系统根据用户输入的关系名, 将在第一行从左至右
自动填写各个属性名;
( 4)用户在关系名或属性名下方的一格内填写相应的操
作命令,操作命令包括,P.(打印或显示),U.(修
改),I.(插入),D.(删除)。如果要打印或显示整
个元组时,应将,P”填在关系名的下方,如果只需打
印或显示某一属性,应将,P”填在相应属性名的下方。
94
? 表格形式如表 2.2所示
表 2.2 QBE操作框架表
关系名 属性 1 属性 2 … 属性 n
操作命令 属性值或
查询条件
属性值或
查询条件
… 属性值或
查询条件
95
2.7.2.1 数据查询
1,简单查询
例 2.33 显示全部学生的信息 。
? 方法一:将 P.填在关系名的下方
? 方法二:将, P”填在各个属性名的下方
S SNO SN SEX AGE DEPT
P.
S SNO SN SEX AGE DEPT
P.赵亦 P.女 P.17 P.计算机
96
? 注意:只有目标属性包括所有的属性时, 将 P.填在关
系名的下方 。
? 这种语言之所以称为示例查询, 就是在操作中采取
,示例, 的方法, 凡用作示例的元素, 其下方均加下
划线 。 如上例中的, 赵亦,,, 女, 等均为示例元素,
即域变量 。 示例元素是所给域中可能的一个值, 而不
必是查询结果中的元素 。 比如用作示例的学生姓名,
可以不是学生表中的学生, 只要给出任意一个学生名
即可 。
97
2,条件查询
例 2.34 查询所有女学生的姓名。
? 目标属性只有姓名, 所以将 P.填在关系名的下方 。
? 查询条件中可以使用比较运算符 >,≥,<,≤,=和 ≠,
其中 =可以省略 。 本例的查询条件是 SEX=?女 ’,, =”
被省略 。
S SNO SN SEX AGE DEPT
P.赵亦 女
98
例 2.35 查询年龄大于 18岁的女学生的姓名 。
? 本例的查询条件是 AGE>18和 SEX=?女 ’ 两个条件的
,与, 。 在 QBE中, 表示两个条件的, 与, 有两种方
法:
? 方法一:把两个条件写在同一行上:
? 方法二:把两个条件写在不同行上,但必须使用相同
的示例元素
S SNO SN SEX AGE DEPT
P.赵亦 女 >18
S SNO SN SEX AGE DEPT
P.赵亦 女
P.赵亦 >18
99
例 2.36 查询既选修了 C1号课程又选修了 C2号课程的学生
的学号 。
? 本例的查询条件是 CNO=?C1?和 CNO=?C2?两个条件的
,与,, 但两个条件涉及同一属性 CNO,则必须把两
个条件写在不同行上, 且使用相同的示例元素 。
例 2.37 查询年龄大于 18岁或者女学生的姓名 。
? 本例的查询条件是 AGE>18和 SEX=?女 ’ 两个条件的
,或, 。 在 QBE中, 表示两个条件的, 或,, 要把两
个条件写在不同行上, 且必须使用不同的示例元素 。
S SNO SN SEX AGE DEPT
P.赵亦 女
P.钱尔 >18
100
例 2.38 查询选修 C1号课程学生的姓名 。
? 本查询涉及两个关系,S和 SC,这两个关系具有公共
的属性 SNO,SNO作为连接属性, 把具有相同的 SNO
值的两个关系连接起来, SNO在两个表中的值要相同 。
S SNO SN SEX AGE DEPT
S1 P.赵亦
SC SNO CNO SCORE
S1 C1
101
例 2.39 查询未选修 C1号课程学生的姓名 。
? 查询条件中的“未选修”需使用逻辑非来表示。 QBE
中的逻辑非运算符为 ┐,填写在关系名下方。
? 如果 S1同学选修 C1号课程的情况为假,则符合查询的
条件,显示 S1同学的学号,然后再查询其他同学。
S SNO SN SEX AGE DEPT
S1 P.赵亦
SC SNO CNO SCORE
┐ S1 C1
102
3,排序查询
例 2.39 查询全体女教师的教师号和姓名, 要求查询结果
按工资升序排列, 工资相同者按年龄降序排列 。
? 对查询结果按照某个属性值升序排列时, 则在相应的
属性下方填入, AO”,降序排列时, 填入, DO”。
? 如果按照多个属性值同时排序, 则用, AO(i)”或
,DO(i)”表示, 其中 I为排序的优先级, I值越小, 优
先级越高 。
T TNO TN SEX AGE DEPT PROF SAL COMM DEPT
S1 P.赵亦 女 DO(2) AO(1)
103
4,库函数查询
? 同 ALPHA语言类似, QBE语言也提供了一些有关运算
的标准函数, 以方便用户 。
? QBE常用的库函数如表 2.2所示
表 2.2 QBE常用的库函数及其功能
函数名称 功能
AVG 按列计算平均值
SUM 按列计算值的总和
MAX 求一列中的最大值
MIN 求一列中的最小值
CNT 按列值计算元组个数
104
例 2.40 求学号为 S1学生的平均分。
SC SNO CNO SCORE
S1 P.AVG.ALL
105
2.7.2.2 数据更新
1,修改
? 修改的命令为 U.
例 2.41 把刘伟教师转到信息系。
T TNO TN SEX AGE DEPT PROF SAL COMM DEPT
U,刘伟 信息
106
2,插入
? 插入的命令为 I.
例 2.42 在 SC表中插入一条选课记录 ( S6,C1) 。
? 注意:新插入的元组必须具有主码值, 其他属性值可
以为空, 如本例中的 SCORE为空 。
SC SNO CNO SCORE
I,S6 C1
107
3,删除
? 删除的命令为 D.
例 2.43 删除 S1同学选修 C1课程的信息 。
SC SNO CNO SCORE
D,S1 C1