第 2章 关系数据库
2.1 关系数据库概述
2.2 关系数据结构
2.3 关系的完整性
2.4 关系代数
2.5 关系演算
2.6 关系数据库管理系统
2.7 小结
关系数据库简介
?系统而严格地提出关系模型的是美国
IBM公司的 E.F.Codd
– 1970年提出关系数据模型
? E.F.Codd,―A Relational Model of Data for
Large Shared Data Banks‖,,Communication of
the ACM》,1970
– 之后, 提出了关系代数和关系演算的概念
– 1972年提出了关系的第一, 第二, 第三范式
– 1974年提出了关系的 BC范式
关系数据库简介
?关系数据库应用数学方法来处理数据库
中的数据
?80年代后, 关系数据库系统成为最重要,
最流行的数据库系统
关系数据库简介
? 典型实验系统
– System R
– University INGRES
? 典型商用系统
– ORACLE
– SYBASE
– DB2
– SQL Server
– INFORMIX
– INGRES
第 2章 关系数据库
2.1 关系数据库概述
2.2 关系数据结构
2.3 关系的完整性
2.4 关系代数
2.5 关系演算
2.6 关系数据库管理系统
2.7 小结
2.1 关系数据库概述
?关系数据库系统是支持关系模型的数据
库系统
?关系模型的组成
– 关系数据结构
– 关系操作集合
– 关系完整性约束
1,关系数据结构
?单一的数据结构 ----关系
– 现实世界的实体以及实体间的各种联系均用
关系来表示
?数据的逻辑结构 ----二维表
– 从用户角度, 关系模型中数据的逻辑结构是
一张二维表 。
2,关系操作
?1) 常用的关系操作
?2) 关系操作的特点
?3) 关系数据语言的种类
?4) 关系数据语言的特点
关系操作 (续)
?1) 常用的关系操作
– 查询
? 选择, 投影, 连接, 除, 并, 交, 差
– 数据更新
? 插入, 删除, 修改
– 查询的表达能力是其中最主要的部分
关系操作(续)
?2) 关系操作的特点
– 集合操作方式, 即操作的对象和结果都是集
合 。
? 非关系数据模型的数据操作方式:一次一记录
? 文件系统的数据操作方式
关系操作(续)
?3) 关系数据语言的种类
– 关系代数语言
? 用 对关系的运算 来表达查询要求
? 典型代表,ISBL
关系操作(续)
? 关系数据语言的种类 ( 续 )
– 关系演算语言:用 谓词 来表达查询要求
? 元组关系演算语言
– 谓词变元的基本对象是元组变量
– 典型代表,APLHA,QUEL
? 域关系演算语言
– 谓词变元的基本对象是域变量
– 典型代表,QBE
– 具有关系代数和关系演算双重特点的语言
? 典型代表,SQL
关系操作(续)
?4) 关系数据语言的特点
– 关系语言是一种高度非过程化的语言
? 存取路径的选择由 DBMS的优化机制来完成
? 用户不必用循环结构就可以完成数据操作
– 能够嵌入高级语言中使用
– 关系代数, 元组关系演算和域关系演算三种
语言在表达能力上完全等价
3,关系的三类完整性约束
?实体完整性
– 通常由关系系统自动支持
?参照完整性
– 早期系统不支持, 目前大型系统能自动支持
?用户定义的完整性
– 反映应用领域需要遵循的约束条件, 体现了
具体领域中的语义约束
– 用户定义后由系统支持
第 2章 关系数据库
2.1 关系数据库概述
2.2 关系数据结构
2.3 关系的完整性
2.4 关系代数
2.5 关系演算
2.6 关系数据库管理系统
2.7 小结
2.2 关系数据结构
?关系模型建立在集合代数的基础上
?关系数据结构的基本概念
– 关系
– 关系模式
– 关系数据库
2.2 关系数据结构
?1.关系
?2.关系模式
?3.关系数据库
一,关系
?⒈ 域 ( Domain)
? 2,笛卡尔积 ( Cartesian Product)
? 3,关系 ( Relation)
⒈ 域( Domain)
?域 是一组具有相同数据类型的值的集合 。
– 例
? 整数
? 实数
? 指定长度的字符串集合
? 介于某个取值范围的整数
? {?男 ’, ‘ 女 ’ }
? 介于某个取值范围的日期
2,笛卡尔积( Cartesian Product)
?1) 笛卡尔积
给定一组域 D1,D2,…, Dn,这些域中可
以有相同的。 D1,D2,…, Dn的 笛卡尔积
为,
D1× D2× … × Dn=
{(d1,d2,…,dn)| di?Di,i= 1,2,…,n}
– 所有域的所有取值的一个组合
– 不能重复
笛卡尔积(续 )
例 给出三个域,
D1=SUPERVISOR ={ 张清玫, 刘逸 }
D2=SPECIALITY={计算机专业, 信息专业 }
D3=POSTGRADUATE={李勇, 刘晨, 王敏 }
则 D1,D2,D3的笛卡尔积为,
D1× D2× D3 =
{ (张清玫, 计算机专业, 李勇 ),(张清玫, 计算机专业, 刘晨 ),
(张清玫, 计算机专业, 王敏 ),(张清玫, 信息专业, 李勇 ),
(张清玫, 信息专业, 刘晨 ),(张清玫, 信息专业, 王敏 ),
(刘逸, 计算机专业, 李勇 ),(刘逸, 计算机专业, 刘晨 ),
(刘逸, 计算机专业, 王敏 ),(刘逸, 信息专业, 李勇 ),
(刘逸, 信息专业, 刘晨 ),(刘逸, 信息专业, 王敏 ) }
笛卡尔积(续 )
? 2) 元组 ( Tuple)
– 笛卡尔积中每一个元素 ( d1,d2,…, dn) 叫作一
个 n元组 ( n-tuple) 或简称 元组 。
例
? 3) 分量( Component)
– 笛卡尔积元素( d1,d2,…, dn)中的每一个值 di
叫作一个 分量 。
例
笛卡尔积(续 )
?4) 基数 ( Cardinal number)
– 若 Di( i= 1,2,…, n) 为有限集, 其基数
为 mi( i= 1,2,…, n), 则 D1× D2× …
× Dn的基数 M为,
在上例中,基数,2× 2× 3= 12,即
D1× D2× D3共有 2× 2× 3= 12个元组
mM i
n
1i ?
? ?
笛卡尔积(续 )
?5)笛卡尔积的表示方法
– 笛卡尔积可表示为一个二维表 。 表中的每行
对应一个元组, 表中的每列对应一个域 。
在上例中, 12个元组可列成一张二维表
表 2, 1 D
1
,D
2
,D
3
的笛卡尔积
S U P E R V I S O R S P E C I A L I T Y P O S T G R A D U A T E
张清玫 计 算 机 专 业 李勇
张清玫 计 算 机 专 业 刘晨
张清玫 计 算 机 专 业 王敏
张清玫 信息专业 李勇
张清玫 信息专业 刘晨
张清玫 信息专业 王敏
刘逸 计 算 机 专 业 李勇
刘逸 计 算 机 专 业 刘晨
刘逸 计 算 机 专 业 王敏
刘逸 信息专业 李勇
刘逸 信息专业 刘晨
刘逸 信息专业 王敏
笛卡尔积(续 )
表 2, 1 D
1
,D
2
,D
3
的笛卡尔积
S U P E R V I S O R S P E C I A L I T Y P O S T G R A D U A T E
张清玫 计 算 机 专 业 李勇
张清玫 计 算 机 专 业 刘晨
张清玫 计 算 机 专 业 王敏
张清玫 信息专业 李勇
张清玫 信息专业 刘晨
张清玫 信息专业 王敏
刘逸 计 算 机 专 业 李勇
刘逸 计 算 机 专 业 刘晨
刘逸 计 算 机 专 业 王敏
刘逸 信息专业 李勇
刘逸 信息专业 刘晨
刘逸 信息专业 王敏
3,关系( Relation)
?1) 关系
– D1× D2× … × Dn的子集叫作在域 D1,D2,…,
Dn上的 关系, 表示为
R( D1,D2,…, Dn)
R,关系名
n,关系的 目 或 度 ( Degree)
关系(续)
?1) 关系 (续 )
– 注意
? 关系是笛卡尔积的有限子集 。 无限关系在数据库
系统中是无意义的 。
? 由于笛卡尔积不满足交换律, 即
(d1,d2,…, dn )≠(d2,d1,…, dn )
但关系满足交换律, 即
(d1,d2, …, di, dj, …, dn) =( d1,d2, …, dj,
di,…, dn) ( i,j = 1,2,…, n)
解决方法:为关系的每个列附加一个属性名以取
消关系元组的有序性
关系(续)
例 在表 2.1 的笛卡尔积中取出有实际意义的元组
来构造关系
关系,SAP(SUPERVISOR,SPECIALITY,POSTGRADUATE)
– 关系名, 属性名
假设,导师与专业,1:1,导师与研究生,1:n
于是,SAP关系可以包含三个元组
{ (张清玫, 信息专业, 李勇 ),
(张清玫,信息专业,刘晨 ),
(刘逸,信息专业,王敏 ) }
关系(续)
? 2) 元组
– 关系中的每个元素是关系中的 元组, 通常用 t 表示 。
? 3) 单元关系与二元关系
– 当 n=1时, 称该关系为 单元 关系 ( Unary relation) 。
– 当 n=2时, 称该关系为 二元 关系 ( Binary relation) 。
关系(续)
?4) 关系的表示
– 关系也是一个二维表, 表的每行对应一个元
组, 表的每列对应一个域 。
表 2, 2 S A P 关系
S U P E R V I S O R S P E C I A L I T Y P O S T G R A D U A T E
张清玫 信息专业 李勇
张清玫 信息专业 刘晨
刘逸 信息专业 王敏
关系(续)
?5) 属性
– 关系中不同列可以对应相同的域, 为了加以
区分, 必须对每列起一个名字, 称为 属性
( Attribute) 。
– n目关系必有 n个属性 。
关系(续)
? 6) 码
– 候选码
? 若关系中的某一属性组的值能唯一地标识一个元
组, 则称该属性组为 候选码 ( Candidate key) 。
? 候选码的诸属性称为 主属性 ( Prime attribute) 。
? 不包含在任何侯选码中的属性称为非码属性
( Non-key attribute) 。
? 在最简单的情况下, 候选码只包含一个属性 。 在
最极端的情况下, 关系模式的所有属性组是这个
关系模式的候选码, 称为 全码 ( All-key) 。
关系(续)
?码 (续 )
– 主码
? 若一个关系有多个候选码, 则选定其中一个为 主
码 ( Primary key) 。
关系(续)
?7) 三类关系
– 基本关系 ( 基本表或基表 )
? 实际存在的表,是实际存储数据的逻辑表示
– 查询表
? 查询结果对应的表
– 视图表
? 由基本表或其他视图表导出的表, 是虚表, 不对
应实际存储的数据
关系(续)
?8) 基本关系的性质
– ① 列是同质的 ( Homogeneous)
? 每一列中的分量是同一类型的数据, 来自同一个
域 。
– ② 不同的列可出自同一个域
? 其中的每一列称为一个属性
? 不同的属性要给予不同的属性名
关系(续)
例,
上例中也可以只给出两个域,
人 ( PERSON) =张清玫, 刘逸, 李勇, 刘晨, 王敏
专业 ( SPECIALITY) =计算机专业, 信息专业
SAP关系的导师属性和研究生属性都从 PERSON域中取值 。
为了避免混淆, 必须给这两个属性取不同的属性名, 而不能
直接使用域名 。
例 如 定 义 导 师 属 性 名 为 SUPERVISOR-PERSON ( 或
SUPERVISOR)
研 究 生 属 性 名 为 POSTGRADUATE-PERSON ( 或
POSTGRADUATE)
SAP(SUPERVISOR-PERSON,SPECIALITY,
POSTGRADUATE-PERSON)
关系(续)
?基本关系的性质 (续 )
– ③ 列的顺序无所谓
? 列的次序可以任意交换
? 遵循这一性质的数据库产品 (如 ORACLE),增加
新属性时, 永远是插至最后一列
? 但也有许多关系数据库产品没有遵循这一性质,
例如 FoxPro仍然区分了属性顺序
关系(续)
?基本关系的性质 (续 )
– ④ 任意两个元组不能完全相同
? 由笛卡尔积的性质决定
? 但许多关系数据库产品没有遵循这一性质 。 例如
Oracle,FoxPro等都允许关系表中存在两个完全
相同的元组, 除非用户特别定义了相应的约束条
件 。
关系(续)
?基本关系的性质 (续 )
– ⑤ 行的顺序无所谓
? 行的次序可以任意交换
? 遵循这一性质的数据库产品 (如 ORACLE),插入
一个元组时永远插至最后一行
? 但也有许多关系数据库产品没有遵循这一性质,
例如 FoxPro仍然区分了元组的顺序
关系(续)
?基本关系的性质 (续 )
– ⑥ 分量必须取原子值
? 每一个分量都必须是不可分的数据项 。 这是规
范条件中最基本的一条
表 2, 3 非规范化关系
P O S T G R A D U A T E
S U P E R V I S O R
S P E C I A L I T Y
P G 1 P G 2
张清玫 信息专业 李勇 刘晨
刘逸 信息专业 王敏
二,关系模式
?1,什么是关系模式
?2.定义关系模式
?3,关系模式与关系
1.什么是关系模式
? 关系模式 ( Relation Schema) 是型, 关系是值
? 关系模式是对关系的描述
– 元组集合的结构
? 属性构成
? 属性来自的域
? 属性与域之间的映象关系
– 元组语义
– 完整性约束条件
– 属性间的数据依赖关系集合
2.定义关系模式
?关系模式可以形式化地表示为,
R( U,D,dom,F)
R 关系名
U 组成该关系的属性名集合
D 属性组 U中属性所来自的域
dom 属性向域的映象集合
F 属性间的数据依赖关系集合 。
定义关系模式 (续 )
例
在上面例子中, 由于导师和研究生出自同一
个域 ——人, 所以要取不同的属性名, 并在
模式中定义属性向域的映象, 即说明它们分
别出自哪个域, 如,
dom( SUPERVISOR-PERSON)
= dom( POSTGRADUATE-PERSON)
=PERSON
定义关系模式 (续 )
? 关系模式通常可以简记为
R (U)
或 R (A1,A2,…, An)
R 关系名
A1,A2,…, An 属性名
注:域名及属性向域的映象常常直接说明为属
性的类型, 长度 。
3,关系模式与关系
?关系模式
– 对关系的描述
– 静态的, 稳定的
?关系
– 关系模式在某一时刻的状态或内容
– 动态的, 随时间不断变化的
?关系模式和关系往往统称为关系, 通过
上下文加以区别 。
三、关系数据库
?1,关系数据库
?2,关系数据库的型与值
1,关系数据库
?在一个给定的应用领域中, 所有实体及
实体之间联系的关系的集合构成一个关
系数据库 。
2,关系数据库的型与值
?关系数据库也有型和值之分
?关系数据库的型称为关系数据库模式,
是对关系数据库的描述
– 若干域的定义
– 在这些域上定义的若干关系模式
?关系数据库的值是这些关系模式在某一
时刻对应的关系的集合, 通常简称为关
系数据库
第 2章 关系数据库
2.1 关系数据库概述
2.2 关系数据结构
2.3 关系的完整性
2.4 关系代数
2.5 关系演算
2.6 关系数据库管理系统
2.7 小结
2.3 关系的完整性
? 关系模型的完整性规则是对关系的某种约束条
件 。
? 关系模型中三类完整性约束,
– 实体完整性
– 参照完整性
– 用户定义的完整性
? 实体完整性和参照完整性是关系模型必须满足
的完整性约束条件, 被称作是关系的两个 不变
性, 应该由关系系统自动支持 。
关系的完整性 (续 )
?1,实体完整性
?2,参照完整性
?3,用户定义的完整性
一,实体完整性
?实体完整性规则 ( Entity Integrity)
– 若属性 A是基本关系 R的主属性, 则属性 A不
能取空值 。
例
SAP(SUPERVISOR,SPECIALITY,POSTGRADUATE)
POSTGRADUATE属性为主码 ( 假设研究生不会重
名 ), 则其不能取空值 。
实体完整性 (续 )
?关系模型必须遵守实体完整性规则的原因
– (1) 实体完整性规则是针对基本关系而言的 。
一个基本表通常对应现实世界的一个实体集
或多对多联系 。
– (2) 现实世界中的实体和实体间的联系都是
可区分的, 即它们具有某种唯一性标识 。
– (3) 相应地, 关系模型中以候选码作为唯一
性标识 。
实体完整性 (续 )
? 关系模型必须遵守实体完整性规则的原因 (续 )
– (4) 候选码中的属性即主属性不能取空值 。
所谓空值就是, 不知道, 或, 无意义, 的值 。
如果主属性取空值, 就说明存在某个不可标
识的实体, 即存在不可区分的实体, 这与第
(2)点相矛盾, 因此这个规则称为实体完整性 。
实体完整性 (续 )
?注意
– 实体完整性规则规定基本关系的所有主属性
都不能取空值, 而不仅是主码整体不能取空
值 。
例,
选修 ( 学号, 课程号, 成绩 )
, 学号, 课程号, 为主码,
则学号和课程号两个属性都不能取空值
二,参照完整性
?1,关系间的引用
?2,外码
?3,参照完整性规则
1,关系间的引用
?在关系模型中实体及实体间的联系都是
用关系来描述的, 因此可能存在着关系
与关系间的引用 。
例 1 学生实体, 专业实体以及专业与学生间
的一对多联系
学生 ( 学号, 姓名, 性别, 专业号, 年龄 )
专业 ( 专业号, 专业名 )
学号 姓名 性别 专 业 号 年龄
801 张三 女 01 19
802 李四 男 01 20
803 王五 男 01 20
804 赵六 女 02 20
805 钱七 男 02 19
专 业 号 专 业 名
01 信息
02 数学
03 计 算 机
学生( 学号,姓名,性别,专业号,年龄)
专业( 专业号,专业名)
关系间的引用 (续 )
例 2 学生, 课程, 学生与课程之间的多对多联系
学生 ( 学号, 姓名, 性别, 专业号, 年龄 )
课程 ( 课程号, 课程名, 学分 )
选修 ( 学号, 课程号, 成绩 )
课 程 号 课 程 名 学分
01 数 据 库 4
02 数 据 结 构 4
03 编译 4
04 P A S C A L 2
学号 姓名 性别 专 业 号 年龄
801 张三 女 01 19
802 李四 男 01 20
803 王五 男 01 20
804 赵六 女 02 20
805 钱七 男 02 19
学号 课 程 号 成绩
801 04 92
801 03 78
801 02 85
802 03 82
802 04 90
803 04 88
学生
学生选课 课程
关系间的引用 (续 )
例 3 学生实体及其内部的领导联系 (一对多 )
学生 ( 学号, 姓名, 性别, 专业号, 年龄, 班长 )
学号 姓名 性别 专 业 号 年龄 班长
801 张三 女 01 19 802
802 李四 男 01 20
803 王五 男 01 20 802
804 赵六 女 02 20 805
805 钱七 男 02 19
2.外码
?外码
– 设 F是基本关系 R的一个或一组属性, 但不
是关系 R的码 。 如果 F与基本关系 S的主码 Ks
相 对 应, 则称 F 是 基 本 关 系 R 的 外码
( Foreign Key)
– 基本关系 R 称 为 参照关系 ( Referencing
Relation)
– 基本关系 S称 为 被参照关系 ( Referenced
Relation) 或 目标关系 ( Target Relation) 。
外码 (续 )
?说明
– 关系 R和 S不一定是不同的关系 。
– 目标关系 S的主码 Ks和参照关系的外码 F必
须定义在同一个 ( 或一组 ) 域上 。
– 外码并不一定要与相应的主码同名 。
– 当外码与相应的主码属于不同关系时, 往往
取相同的名字, 以便于识别 。
?例
3,参照完整性规则
?参照完整性规则就是定义外码与主码之
间的引用规则 。
?参照完整性规则
– 若属性 ( 或属性组 ) F是基本关系 R的外码, 它与基
本关系 S的主码 Ks相对应 ( 基本关系 R和 S不一定是
不同的关系 ), 则对于 R中每个元组在 F上的值必须
为,
? 或者取空值 ( F的每个属性值均为空值 )
? 或者等于 S中某个元组的主码值 。
参照完整性规则 (续 )
?例
例 1
学生关系中每个元组的, 专业号, 属性只能
取下面两类值,
( 1) 空值, 表示尚未给该学生分配专业;
( 2) 非空值, 这时该值必须是专业关系中某
个元组的, 专业号, 值, 表示该学生不可能
分配到一个不存在的专业中 。
参照完整性规则 (续 )
例 2
由于, 学号, 和, 课程号, 是选修关系中的
主属性, 按照实体完整性和参照完整性规则,
它们只能取相应被参照关系中已经存在的主
码值 。
参照完整性规则 (续 )
例 3
―班长”属性值可以取两类值,
( 1)空值,表示该学生所在班级尚未选出班
长,或该学生本人即是班长;
( 2)非空值,这时该值必须是本关系中某个
元组的学号值。
三,用户定义的完整性
?用户定义的完整性是针对某一具体关系
数据库的约束条件, 反映某一具体应用
所涉及的数据必须满足的语义要求 。
?关系模型应提供定义和检验这类完整性
的机制, 以便用统一的系统的方法处理
它们, 而不要由应用程序承担这一功能 。
用户定义的完整性 (续 )
例
课程 (课程号, 课程名, 学分 )
– ―课程名, 属性必须取唯一值
– 非主属性, 课程名, 也不能取空值
–, 学分, 属性只能取值 {1,2,3,4}
第 2章 关系数据库
2.1 关系数据库概述
2.2 关系数据结构
2.3 关系的完整性
2.4 关系代数
2.5 关系演算
2.6 关系数据库管理系统
2.7 小结
关系代数(续)
? 1,关系代数
? 2,运算的三要素
? 3,关系代数运算的三个要素
? 4,关系代数运算的分类
? 5,表示记号
关系代数(续)
?1.关系代数
– 一种抽象的查询语言
– 用对关系的运算来表达查询
关系代数(续)
?2,运算的三要素
– 运算对象
– 运算符
– 运算结果
关系代数(续)
?3,关系代数运算的三个要素
– 运算对象:关系
– 运算结果:关系
– 运算符:四类
关系代数(续)
– 运算符 ( 续 )
? 集合运算符
– 将关系看成元组的集合
– 从关系的, 水平, 方向即行的角度来进行运
算
? 专门的关系运算符
– 不仅涉及行而且涉及列
? 算术比较符
– 辅助专门的关系运算符进行操作
? 逻辑运算符
– 辅助专门的关系运算符进行操作
集
合
运
算
符
∪
-
∩
×
并
差
交
广义笛
卡尔积
比
较
运
算
符
>
≥
<
≤
=
≠
大于
大于等于
小于
小于等于
等于
不等于
运算符 含义 运算符 含义
表 2.4 关系代数运算符
关系代数(续)
专门的
关系
运算符
σ
π
÷
选择
投影
连接
除
逻辑运
算符
?
∧
∨
非
与
或
运算符 含义 运算符 含义
表 2.4 关系代数运算符(续)
关系代数(续)
关系代数(续)
?4.关系代数运算的分类
– 传统的集合运算
? 并, 差, 交, 广义笛卡尔积
– 专门的关系运算
? 选择, 投影, 连接, 除
关系代数(续)
?5.表示记号
– ( 1) R,t?R,t[Ai]
设关系模式为 R(A1,A2,…, An)。它的一
个关系设为 R。 t?R表示 t是 R的一个元组。
t[Ai]则表示元组 t中相应于属性 Ai的一个分量。
关系代数(续)
– ( 2) A,t[A],A
若 A={Ai1,Ai2,…, Aik},其中 Ai1,Ai2,…,
Aik是 A1,A2,…, An中的一部分,则 A称为
属性列或域列。 t[A]=(t[Ai1],t[Ai2],…,
t[Aik])表示元组 t在属性列 A上诸分量的集合。
A则表示 {A1,A2,…, An}中去掉 {Ai1,
Ai2,…, Aik}后剩余的属性组。
关系代数(续)
– ( 3) tr ts
R为 n目关系,S为 m目关系。 tr ?R,ts?S,
tr ts称为元组的连接。它是一个 n + m列的元
组,前 n个分量为 R中的一个 n元组,后 m个
分量为 S中的一个 m元组。
关系代数(续)
– 4) 象集 Zx
给定一个关系 R( X,Z), X和 Z为属性组 。
当 t[X]=x时, x在 R中的 象集 ( Images Set)
为,
Zx={t[Z]|t ?R,t[X]=x}
它表示 R中属性组 X上值为 x的诸元组在 Z上
分量的集合。
2.4 关系代数
? 2.4.1 传统的集合运算
? 2.4.2 专门的关系运算
2.4 关系代数
? 2.4.1 传统的集合运算
? 2.4.2 专门的关系运算
2.4.1 传统的集合运算
? 并
? 差
? 交
? 广义笛卡尔积
1,并( Union)
?R和 S
– 具有相同的目 n( 即两个关系都有 n个属性 )
– 相应的属性取自同一个域
?R∪ S
– 仍为 n目关系, 由属于 R或属于 S的元组组成
R∪ S = { t|t ? R∨ t ?S }
并 (续 )
A B C
a1 b1 c1
a1 b2 c2
a2 b2 c1
A B C
a1 b1 c1
a1 b2 c2
a1 b3 c2
a2 b2 c1
A B C
a1 b2 c2
a1 b3 c2
a2 b2 c1
R
S
R∪ S
2,差( Difference)
?R和 S
– 具有相同的目 n
– 相应的属性取自同一个域
?R - S
– 仍为 n目关系, 由属于 R而不属于 S的所有元
组组成
R -S = { t|t?R∧ t?S }
差 (续 )
A B C
a1 b1 c1
a1 b2 c2
a2 b2 c1 A B C
a1 b1 c1
A B C
a1 b2 c2
a1 b3 c2
a2 b2 c1
R
S
R-S
3,交( Intersection)
?R和 S
– 具有相同的目 n
– 相应的属性取自同一个域
?R∩S
– 仍为 n目关系, 由既属于 R又属于 S的元组组
成
R∩S = { t|t ? R∧ t ?S }
R∩S = R –(R-S)
交 (续 )
A B C
a1 b1 c1
a1 b2 c2
a2 b2 c1
A B C
a1 b2 c2
a2 b2 c1
A B C
a1 b2 c2
a1 b3 c2
a2 b2 c1
R
S
R ∩ S
4,广义笛卡尔积( Extended Cartesian Product)
?R
– n目关系, k1个元组
?S
– m目关系, k2个元组
?R× S
– 列,( n+m) 列的元组的集合
? 元组的前 n列是关系 R的一个元组
? 后 m列是关系 S的一个元组
– 行,k1× k2个元组
? R× S = {tr ts |tr ?R ∧ ts?S }
广义笛卡尔积 (续 )
A B C
a1 b1 c1
a1 b2 c2
a2 b2 c1
A B C
a1 b2 c2
a1 b3 c2
a2 b2 c1
R
S
R × S
A B C A B C
a1 b1 c1 a1 b2 c2
a1 b1 c1 a1 b3 c2
a1 b1 c1 a2 b2 c1
a1 b2 c2 a1 b2 c2
a1 b2 c2 a1 b3 c2
a1 b2 c2 a2 b2 c1
a2 b2 c1 a1 b2 c2
a2 b2 c1 a1 b3 c2
a2 b2 c1 a2 b2 c1
2.4 关系代数
? 2.4.1 传统的集合运算
? 2.4.2 专门的关系运算
2.4.2 专门的关系运算
? 选择
? 投影
? 连接
? 除
1,选择( Selection)
? 1) 选择又称为限制 ( Restriction)
? 2) 选择运算符的含义
– 在关系 R中选择满足给定条件的诸元组
σF(R) = {t|t?R∧ F(t)= '真 '}
– F:选择条件, 是一个逻辑表达式, 基本形式为,
[?( ] X1θY1 [ )][φ [?( ] X2θY2 [ )]]…
? θ:比较运算符 ( >, ≥,<, ≤,=或 <>)
? X1,Y1等:属性名, 常量, 简单函数;属性名也可以用
它的序号来代替;
? φ:逻辑运算符 ( ∧ 或 ∨ )
? [ ]:表示任选项
? …,表示上述格式可以重复下去
选择(续)
?3) 选择运算是从行的角度进行的运算
?4) 举例
设有一个学生 -课程数据库, 包括学生关系
Student,课程关系 Course和选修关系 SC。
σ
选择(续)
学 号
Sno
姓 名
Sname
性 别
Ssex
年 龄
Sage
所 在
系
Sdept
95001 李勇 男 20 CS
95002
刘晨
女
19
IS
95003
王敏
女
18
MA
95004
张立
男
19
IS
(a)
Student
例 1 例 2 例 4 例 3 例 9
选择(续)
(b)
Course
课程号 课程名
先行课
学分
Cno
Cname
Cpno
Ccredit
1
数据库
5
4
2
数学
2
3
信息系统
1
4
4
操作系统
6
3
5
数据结构
7
4
6
数据处理
2
7
PASCAL语言
6
4
例 9
选择(续)
(c)
SC
学 号
课 程 号
成 绩
Sno
Cno
Grade
95001
1
92
95001
2
85
95001
3
88
95002
2
90
95002
3
80
例 7 例 9
选择(续)
[例 1] 查询信息系 ( IS系 ) 全体学生
σSdept = 'IS' (Student)
或 σ5 ='IS' (Student)
结果,
Sno
Sname
Ssex
Sage
Sdept
95002
刘晨
女
19
IS
95004
张立
男
19
IS
选择(续)
[例 2] 查询年龄小于 20岁的学生
σSage < 20(Student)
或 σ4 < 20(Student)
结果,
Sno
Sname
Ssex
Sage
Sdept
95002
刘晨
女
19
IS
95003
王敏
女
18
MA
95004
张立
男
19
IS
2,投影( Projection)
?1) 投影运算符的含义
– 从 R中选择出若干属性列组成新的关系
πA(R) = { t[A] | t ?R }
A,R中的属性列
2,投影( Projection)
?2) 投影操作主要是从列的角度进行运算
– 但投影之后不仅取消了原关系中的某些列,
而且还可能取消某些元组 ( 避免重复行 )
π
投影(续)
?3) 举例
[例 3] 查询学生的姓名和所在系
即求 Student关系上学生姓名和所在系两个
属性上的投影
πSname,Sdept(Student)
或 π2,5(Student)
结果,
投影(续)
Sname Sdept
李勇 CS
刘晨 IS
王敏 MA
张立 IS
投影(续)
[例 4] 查询学生关系 Student中都有哪些系
πSdept(Student)
结果,Sdept
CS
IS
MA
3,连接( Join)
? 1) 连接也称为 θ连接
? 2) 连接运算的含义
– 从两个关系的笛卡尔积中选取属性间满足
一定条件的元组
R S = { | tr ? R∧ ts ?S∧ tr[A]θts[B] }
? A和 B,分别为 R和 S上度数相等且可比的属性组
? θ:比较运算符
– 连接运算从 R和 S的广义笛卡尔积 R× S中选
取( R关系)在 A属性组上的值与( S关系)
在 B属性组上值满足比较关系的元组。
AθB tr ts
连接 (续 )
?3)两类常用连接运算
– 等值连接( equijoin)
? 什么是等值连接
– θ为“=”的连接运算称为等值连接
? 等值连接的含义
– 从关系 R与 S的广义笛卡尔积中选取 A,B属性
值相等的那些元组, 即等值连接为,
R S = { | tr ?R∧ ts ?S∧ tr[A] = ts[B] } A=B tr ts
连接 (续 )
– 自然连接 ( Natural join)
? 什么是自然连接
– 自然连接是一种特殊的等值连接
?两个关系中进行比较的分量必须是相同
的属性组
?在结果中把重复的属性列去掉
? 自然连接的含义
R和 S具有相同的属性组 B
R S = { | tr ?R∧ ts ?S∧ tr[B] = ts[B] } tr ts
连接 (续 )
?4) 一般的连接操作是从行的角度进行运
算 。
自然连接还需要取消重复列,所以是
同时从行和列的角度进行运算。
AθB
R
S
连接 (续 )
?5)举例
[例 5]
A B C
a1 b1 5
a1 b2 6
a2 b3 8
a2 b4 12
B
E
b
1
3
b
2
7
b
3 10
b3
2
b
5
2
R S
连接 (续 )
R S
A
R.B
C
S.B
E
a1
b1
5
b2
7
a
1
b1
5
b3
10
a
1
b2
6
b2
7
a
1
b2
6
b3
10
a
2
b3
8
b3
10
C< E
连接 (续 )
等值连接 R S
R.B=S.B
A
R.B
C
S.B
E
a1
b1
5
b1
3
a1
b2
6
b2
7
a2
b3
8
b3
10
a2
b3
8
b3
2
连接 (续 )
自然连接 R S
A
B
C
E
a1
b1
5
3
a1
b2
6
7
a2
b3
8
10
a2
b3
8
2
4,除( Division)
? 1) 除运算的含义
– 给定关系 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]
除 (续 )
?2) 除操作是同时从行和列角度进行运算
?3) 举例
[例 6]
÷
R
S
除 (续 )
A
B
C
a1
b1
c2
a
2
b3
c7
a
3
b4
c6
a
1
b2
c3
a
4
b6
c6
a
2
b2
c3
a
1
b2
c1
B
C
D
b1
c2
d1
b2
c1
d1
b2
c3
d2
R÷ S
A
a
1
R
S
除 (续 )
-分析,
– 在关系 R中, A可以取四个值 {a1,a2,a3,a4}。
a1的象集为 {(b1,c2),(b2,c3),(b2,c1)}
a2的象集为 {(b3,c7),(b2,c3)}
a3的象集为 {(b4,c6)}
a4的象集为 {(b6,c6)}
– S在 (B,C)上的投影为 {(b1,c2),(b2,c1),(b2,c3) }
– 只有 a1的象集 (B,C)a1包含了 S在 (B,C)属性组上的
投影,所以 R÷ S ={a1}
5.综合举例
以学生 -课程数据库为例
[例 7] 查询至少选修 1号课程和 3号课程的学生号
码 。
首先建立一个临时关系 K,
然后求,πSno,Cno(SC)÷ K
Cno
1
3
综合举例 (续 )
? 例 7续 πSno.Cno(SC)
95001象集 {1,2,3};
95002象集 {2,3}
πCno(K)={1,3}
于是,πSno.Cno(SC)÷ K={95001}
Sno
Cno
95001
1
95001
2
95001
3
95002
2
95002
3
综合举例 (续 )
[例 8] 查询选修了 2号课程的学生的学号 。
πSno( σCno='2'( SC)) = { 95001,95002}
综合举例 (续 )
[例 9] 查询至少选修了一门其直接先行课为 5号课
程的课程的学生姓名 。
πSname(σCpno='5'(Course SC Student))
或
πSname(σCpno='5'(Course) SC πSno,Sname(Student))
或
πSname (πSno (σCpno='5' (Course) SC) πSno,Sname (Student))
综合举例 (续 )
[例 10] 查询选修了全部课程的学生号码和姓名 。
πSno,Cno( SC) ÷ πCno( Course) πSno,Sname( Student)
小结
? 关系代数运算
– 关系代数运算
并, 差, 交, 笛卡尔积, 投影, 选择, 连接, 除
– 基本运算
并, 差, 笛卡尔积, 投影, 选择
– 交, 连接, 除
可以用 5种基本运算来表达
引进它们并不增加语言的能力, 但可以简化表达
小结 (续 )
? 关系代数表达式
– 关系代数运算经有限次复合后形成的式子
? 典型关系代数语言
– ISBL( Information System Base Language)
? 由 IBM United Kingdom研究中心研制
? 用于 PRTV( Peterlee Relational Test Vehicle)
实验系统
第 2章 关系数据库
2.1 关系数据库概述
2.2 关系数据结构
2.3 关系的完整性
2.4 关系代数
2.5 关系演算
2.6 关系数据库管理系统
2.7 小结
2.5 关系演算
?关系演算
– 以数理逻辑中的谓词演算为基础
?种类:按谓词变元不同分类
– 元组关系演算:以元组变量作为谓词变元的
基本对象
– 域关系演算:以域变量作为谓词变元的基本
对象
2.5 关系演算
?2.5.1 元组关系演算语言 ALPHA
?2.5.2 域关系演算语言 QBE
2.5 关系演算
?2.5.1 元组关系演算语言 ALPHA
?2.5.2 域关系演算语言 QBE
2.5.1 元组关系演算语言 ALPHA
? 一种典型的元组关系演算语言, 但未实际实现
– 由 E.F.Codd提出
– INGRES所用的 QUEL语言是参照 ALPHA语言研制
的
? 语句
– 检索语句
? GET
– 更新语句
? PUT,HOLD,UPDATE,DELETE,DROP
一、检索操作
? 语句格式,
GET 工作空间名 [( 定额 ) ]( 表达式 1)
[,操作条件 ] [DOWN/UP 表达式 2]
– 定额:规定检索的元组个数
? 格式,数字
– 表达式 1:指定语句的操作对象
? 格式,
关系名 | 关系名, 属性名 | 元组变量, 属性名 | 集函数 [,… ]
– 操作条件:将操作结果限定在满足条件的元组中
? 格式,逻辑表达式
– 表达式 2:指定排序方式
? 格式,关系名, 属性名 | 元组变量, 属性名 [,… ]
检索操作 (续 )
?种类
– (1) 简单检索 (即不带条件的检索 )
– (2) 限定的检索 (即带条件的检索 )
– (3) 带排序的检索
– (4) 带定额的检索
– (5) 用元组变量的检索
– (6) 用存在量词的检索
检索操作 (续 )
– (7) 带有多个关系的表达式的检索
– (8) 用全称量词的检索
– (9) 用两种量词的检索
– (10) 用蕴函 ( Implication) 的检索
– (11) 集函数
( 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
[例 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 关系名 变量名
– 一个关系可以设多个元组变量
用元组变量的检索 (续 )
[例 7] 查询信息系学生的名字 。
RANGE Student X
GET W (X.Sname),X.Sdept='IS'
(6) 用存在量词的检索
[例 8] 查询选修 2号课程的学生名字 。
RANGE SC X
GET W (Student.Sname),?X(X.Sno=Student.Sno∧ X.Cno='2')
[例 9] 查询选修了这样课程的学生学号, 其直
接先行课是 6号课程 。
RANGE Course CX
GET W (SC.Sno),?CX (CX.Cno=SC.Cno∧ CX.Pcno='6')
用存在量词的检索 (续 )
[例 10] 查询至少选修一门其先行课为 6号课程的
学生名字 。
RANGE Course CX
SC SCX
GET W (Student.Sname),?SCX (SCX.Sno=Student.Sno∧
?CX (CX.Cno=SCX.Cno∧ CX.Pcno='6'))
前束范式形式,
GET W (Student.Sname),?SCX?CX (SCX.Sno=Student.Sno∧
CX.Cno=SCX.Cno∧ CX.Pcno='6')
( 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),??SCX
(SCX.Sno=Student.Sno∧ SCX.Cno='1')
?
( 9)用两种量词的检索
[例 13] 查询选修了全部课程的学生姓名 。
RANGE Course CX
SC SCX
GET W (Student.Sname),CX?SCX
(SCX.Sno=Student.Sno∧
SCX.Cno=CX.Cno)
?
( 10)用蕴函( Implication)的检索
[例 14] 查询最少选修了 95002学生所选课程的
学生学号 。
RANGE Couse CX
SC SCX
SC SCY
GET W (Student.Sno),CX(?SCX
(SCX.Sno='95002'∧ SCX.Cno=CX.Cno)
?SCY(SCY.Sno=Student.Sno∧
SCY.Cno= CX.Cno))
?
( 11)集函数
?常用集函数 ( Aggregation function) 或
内部函数 ( Build-in function)
函 数 名
功 能
COUNT
对元组计数
TOTAL
求 总 和
MAX
求最大值
MIN
求最小值
AVG
求平均值
集函数 (续 )
[例 15] 查询学生所在系的数目 。
GET W (COUNT(Student.Sdept))
COUNT函数在计数时会自动排除重复值 。
[例 16] 查询信息系学生的平均年龄 。
GET W (AVG(Student.Sage)),
Student.Sdept='IS'
二、更新操作
?(1) 修改操作
?(2) 插入操作
?(3) 删除操作
( 1)修改操作
? 步骤
① 用 HOLD语句将要修改的元组从数据库中读到工作
空间中
HOLD 工作空间名 ( 表达式 1) [,操作条件 ]
HOLD语句是带上并发控制的 GET语句
② 用宿主语言修改工作空间中元组的属性
③ 用 UPDATE语句将修改后的元组送回数据库中
UPDATE 工作空间名
修改操作 (续 )
[例 17] 把 95007学生从计算机科学系转到信息系 。
HOLD W (Student.Sno,Student.Sdetp),
Student.Sno='95007'
( 从 Student关系中读出 95007学生的数据 )
MOVE 'IS' TO W.Sdept
( 用宿主语言进行修改 )
UPDATE W
( 把修改后的元组送回 Student关系 )
更新操作 (续 )
?修改关系主码
– ALPHA语言不允许直接修改主码 。
例如不能用 UPDATE语句将学号 95001改为 95102
– 间接修改主码值的方法:删除 +插入
? 先用删除操作删除该元组
? 再把具有新主码值的元组插入到关系中
( 2)插入操作
?步骤
– ① 用宿主语言在工作空间中建立新元组
– ② 用 PUT语句把该元组存入指定关系中
PUT 工作空间名 ( 关系名 )
?PUT语句只对一个关系操作
插入操作 (续 )
[例 18] 学校新开设了一门 2学分的课程, 计算机
组织与结构,, 其课程号为 8,直接先行课为 6
号课程 。 插入该课程元组 。
MOVE '8' TO W.Cno
MOVE '计算机组织与结构 ' TO W.Cname
MOVE '6' TO W.Cpno
MOVE '2' TO W.Ccredit
PUT W (Course)
( 3)删除操作
?步骤
① 用 HOLD语句把要删除的元组从数据库中
读到工作空间中
② 用 DELETE语句删除该元组
DELETE 工作空间名
删除操作 (续 )
[例 19] 95110学生因故退学, 删除该学生元组 。
HOLD W (Student),Student.Sno='95110'
DELETE W
删除操作 (续 )
[例 20] 将学号 95001改为 95102。
HOLD W (Student),Student.Sno='95001'
DELETE W
MOVE '95102' TO W.Sno
MOVE '李勇 ' TO W.Sname
MOVE '男 ' O W.Ssex
MOVE '20' TO W.Sage
MOVE 'CS' TO W.Sdept
PUT W (Student)
删除操作 (续 )
?在删除操作中保持参照完整性
– 删除被参照关系时,必须首先删除参照关系
中的相应元组
? 手工删除
? 由 DBMS自动执行
删除操作 (续 )
[例 21] 删除全部学生 。
HOLD W (SC)
DELETE W
HOLD W (Student)
DELETE W
元组关系演算语言 ALPHA
?检索操作 GET
GET 工作空间名 [( 定额 ) ]( 表达式 1)
[,操作条件 ] [DOWN/UP 表达式 2]
?插入操作
– 建立新元组 --PUT
?修改操作
– HOLD--修改 --UPDATE
?删除操作
– HOLD--DELETE
2.5 关 系 演 算
?2.5.1 元组关系演算语言 ALPHA
?2.5.2 域关系演算语言 QBE
2.5.2 域关系演算语言 QBE
? 一种典型的域关系演算语言
– 由 M.M.Zloof提出
– 1978年在 IBM370上得以实现
– QBE也指此关系数据库管理系统
? QBE,Query By Example
基于屏幕表格的查询语言
– 查询要求:以填写表格的方式构造查询
? 用示例元素 (域变量 )来表示查询结果可能的情况
– 查询结果:以表格形式显示
域关系演算语言 QBE (续)
? QBE操作框架
关系名 属性名
操作命令 元组属性值或查询条件或操作命令
一、检索操作
?操作步骤
( 1) 用户提出要求;
( 2) 屏幕显示空白表格;
( 3) 用户在最左边一栏输入要查询的关系名,
例如 Student;
Student
检索操作(续)
( 4)系统显示该关系的属性名
( 5)用户在上面构造查询要求
Student
Sno
Sname
Ssex
Sage
Sdept
P,T
AO,C
Student
Sno
Sname
Ssex
Sage
Sdept
检索操作(续)
( 6)屏幕显示查询结果
Student
Sno
Sname
Ssex
Sage
Sdept
李勇 张立
C
检索操作(续)
?构造查询的几个要素
– 示例元素 即域变量 一定要加下划线 。
? 示例元素是该域中的一个可能取值, 它不必是查
询结果中的元素 。 例如要查信息系的学生姓名,
只要给出任意的一个学生名即可, 而不必真是信
息系的某个学生名 。
– 打印操作符 P,指定查询结果所含属性列
– 查询条件 不用加下划线。
? 可使用比较运算符>,≥,<,≤,=和 ≠。其中
=可以省略。
– 排序要求 AO./DO,
检索操作(续)
?检索操作的主要类型
– 1,简单查询
– 2,条件查询
– 3,集函数
– 4,对查询结果排序
1,简单查询
[例 1] 查询全体学生的全部数据 。
Student
Sno
Sname
Ssex
Sage
Sdept
P.95001 P,李勇 P.男 P.20 P.CS
简单查询(续)
显示全部数据也可以简单地把 P.操作符作
用在关系名上 。
Student
Sno
Sname
Ssex
Sage
Sdept
P,
2,条件查询
?(1) 简单条件
?(2) 不同属性条件的与
?(3) 同一属性条件的与
?(4) 或条件
?(5) 多表连接
?(6) 非条件
2,条件查询
?(1) 简单条件
[例 2] 求信息系全体学生的姓名 。
Student
Sno
Sname
Ssex
Sage
Sdept
P,李勇
IS
条件查询(续)
[例 3] 求年龄大于 19岁的学生的学号 。
Student
Sno
Sname
Ssex
Sage
Sdept
P.95001
>19
条件查询(续)
?(2) 不同属性条件的与
– 表示方法
? 把两个条件写在 同一行 上;
? 把两个条件写在 不同行 上, 但使用 相同 的
示例元素值 。
条件查询(续)
[例 4] 求计算机科学系年龄大于 19岁的学
生的学号 。
方法 ( 1),把两个条件写在同一行上
Student
Sno
Sname
Ssex
Sage
Sdept
P.95001
>19 CS
条件查询(续)
方法 ( 2),把两个条件写在不同行上, 但使用
相同的示例元素值
注:对于多行条件的查询, 先输入哪一行是
任意的, 查询结果相同 。
Student
Sno
Sname
Ssex
Sage
Sdept
P.95001 P.95001
>19
CS
条件查询(续)
?(3) 同一属性条件的与
– 表示方法
? 把两个条件写在不同行上, 但使用 相同 的
示例元素值 。
条件查询(续)
[例 5] 查询既选修了 1号课程又选修了 2号课程
的学生的学号 。
SC
Sno
Cno
Grade
P.95001 P.95001
1
2
条件查询(续)
?(4) 或条件
– 表示方法
? 把两个条件写在不同行上, 并且使用 不同
的示例元素值 。
条件查询(续)
[例 6] 查询计算机科学系或者年龄大于 19岁的
学生的学号 。
Student
Sno
Sname
Ssex
Sage
Sdept
P.95001 P.95002
>19
CS
条件查询(续)
?(5) 多表连接
– 表示方法
? 通过 相同的连接属性值 来把多个关系连接
起来
条件查询(续)
[例 7] 查询选修 1号课程的学生姓名 。
注意:示例元素 Sno是连接属性,其值在两个
表中要相同。
SC
Sno
Cno
Grade
95001 1
Student
Sno
Sname
Ssex
Sage
Sdept
95001 P.李勇
条件查询(续)
?(6) 非条件
– 表示方法
? 将逻辑非写在关系名下面
条件查询(续)
[例 8] 查询未选修 1号课程的学生姓名
思路:显示学号为 95001的学生名字, 而该学生
选修 1号课程的情况为假 。
SC
Sno
Cno
Grade
95001 1
?
Student
Sno
Sname
Ssex
Sage
Sdept
95001 P.李勇
条件查询(续)
[例 9] 查询有两个人以上选修的课程号 。
思路:查询这样的课程 1,它不仅被 95001选
修, 而且也被另一个学生 ( ?95001) 选修
了 。
SC
Sno
Cno
Grade
95001 ?95001
P.1
1
3,集函数
?常用集函数,
函 数 名
功 能
CNT
对元组计数
SUM
求 总 和
AVG
求平均值
MAX
求最大值
MIN
求最小值
集函数(续)
[例 10] 查询信息系学生的平均年龄 。
Student
Sno
Sname
Ssex
Sage
Sdept
P.AVG.ALL,IS
4,对查询结果排序
? 排序要求
– 按单个属性值排序
? 升序,AO,
? 降序,DO,
– 按多个属性值排序
? 升序,AO(i),
i为排序的优先级, i值越小, 优先级越高 。
? 降序,DO(i),
对查询结果排序 (续)
[例 11] 查全体男生的姓名, 要求查询结果
按所在系升序排序, 对相同系的学生按
年龄降序排序 。
Student
Sno
Sname
Ssex
Sage
Sdept
P.李勇 男 DO( 2), AO( 1),
检索操作小结
?四类检索操作
– 1,简单查询
– 2,条件查询
– 3,集函数
– 4,对查询结果排序
检索操作小结 (续 )
? 条件查询
– 简单条件
– 与条件
? 不同属性条件的与
? 同一属性条件的与
– 或条件
– 非条件
– 多表连接
检索操作小结(续)
?构造查询的几个要素
– 示例元素
– 打印操作符 P,
– 查询条件
– 排序要求
检索操作小结(续)
?何时需要使用示例元素
– 当打印操作符 P,位于属性列上时
– 表示进行连接操作时
二,更新操作
?1,修改操作
?2,插入操作
?3,删除操作
1,修改操作
?修改操作符
– U,
?关系的主码不允许直接修改
– 间接修改
? 先删除该元组
? 然后再插入新的主码的元组
修改操作 (续 )
?两类修改操作
– (1) 简单修改操作
– (2) 涉及表达式的修改操作
修改操作 (续 )
? (1) 简单修改操作
– 两种表示方法
? 1) 将操作符, U.‖放在值上
? 2) 将操作符, U.‖放在关系上
– 必须用主码指定要修改的元组
– 不一定需要使用示例元素
修改操作 (续 )
[例 12] 把 95001学生的年龄改为 18岁 。
方法 (1),将操作符, U.‖放在值上
Student
Sno
Sname
Ssex
Sage
Sdept
95001
U,18
修改操作 (续 )
方法 (2),将操作符, U.‖放在关系上
码 95001标明要修改的元组 。, U.‖标明所在的
行是修改后的新值 。
由于主码是不能修改的, 所以系统不会混淆
要修改的属性 。
Student
Sno
Sname
Ssex
Sage
Sdept
U,
95001
18
修改操作 (续 )
[例 13] 将计算机科学系所有学生的年龄都改
为 18岁 。
Student
Sno
Sname
Ssex
Sage
Sdept
95008
U.18
CS
修改操作 (续 )
?(2) 涉及表达式的修改操作
– 表示方法
? 分两行分别表示改前和改后的示例元素,
并且必须将操作符, U.‖放在关系上 。
– 必须使用示例元素
修改操作 (续 )
[例 14] 把 95001学生的年龄增加 1岁 。
Student
Sno
Sname
Ssex
Sage
Sdept
U,
95001
95001
17 17+1
修改操作 (续 )
[例 15] 将计算机科学系所有学生的年龄都增
加 1岁 。
Student
Sno
Sname
Ssex
Sage
Sdept
U,
95008
95008
18 18+1
CS
2,插入操作
?插入操作符
– I,
?新插入的元组必须具有码值, 其他属性
值可以为空 。
插入操作(续)
[例 16] 把信息系女生 95701,姓名张三, 年龄
17岁存入数据库中 。
Student
Sno
Sname
Ssex
Sage
Sdept
I,
95701
张三
女
17
IS
3,删除操作
?删除操作符
– D,
[例 17] 删除学生 95089。
Student
Sno
Sname
Ssex
Sage
Sdept
D,
95089
删除操作 (续)
?保持参照完整性
– DBMS自动保持
– 手工保持
? 由于 SC关系与 Student关系之间具有参照关系,
为保证参照完整性, 删除 95089学生 前, 先删除
95089学生选修的全部课程 。
SC
Sno
Cno
Grade
D,
95089
第 2章 关系数据库
2.1 关系数据库概述
2.2 关系数据结构
2.3 关系的完整性
2.4 关系代数
2.5 关系演算
2.6 关系数据库管理系统
2.7 小结
2.6 关系数据库管理系统
?关系数据库管理系统简称为关系系统,
指支持关系模型的系统。但由于关系模
型中并不是每一部分都是同等重要的,
所以不苛求一个实际的关系系统必须完
全支持关系模型。
?一个关系系统至少支持,
– 关系数据库(即关系数据结构)
– 支持选择、投影和(自然)连接运算
关系数据库管理系统(续)
?根据 E.F.Codd的思想,关系系统分为四
类
– 表式系统
– (最小)关系系统
– 关系完备系统
– 完全关系系统
第 2章 关系数据库
2.1 关系数据库概述
2.2 关系数据结构
2.3 关系的完整性
2.4 关系代数
2.5 关系演算
2.6 关系数据库管理系统
2.7 小结
2.6 小结
?关系数据模型的重要概念
– 数据结构
– 关系操作
– 关系的完整性
小结 (续 )
?关系数据结构
– 关系
? 域
? 笛卡尔积
? 关系
– 关系,属性,元组
– 候选码,主码,主属性
– 基本关系的性质
– 关系模式
– 关系数据库
小结 (续 )
?关系操作
– 常用关系操作
? 查询
– 选择、投影、连接、除、并、交、差
? 数据更新
– 插入、删除、修改
小结 (续 )
– 关系数据语言
? 用代数方式来表达的关系语言
–关系代数
? 用逻辑方式来表达的关系语言
–元组关系演算 (ALPHA)
–域关系演算 (QBE)
小结 (续 )
?关系的完整性
– 实体完整性
– 参照完整性
? 外码
– 用户定义的完整性
2.1 关系数据库概述
2.2 关系数据结构
2.3 关系的完整性
2.4 关系代数
2.5 关系演算
2.6 关系数据库管理系统
2.7 小结
关系数据库简介
?系统而严格地提出关系模型的是美国
IBM公司的 E.F.Codd
– 1970年提出关系数据模型
? E.F.Codd,―A Relational Model of Data for
Large Shared Data Banks‖,,Communication of
the ACM》,1970
– 之后, 提出了关系代数和关系演算的概念
– 1972年提出了关系的第一, 第二, 第三范式
– 1974年提出了关系的 BC范式
关系数据库简介
?关系数据库应用数学方法来处理数据库
中的数据
?80年代后, 关系数据库系统成为最重要,
最流行的数据库系统
关系数据库简介
? 典型实验系统
– System R
– University INGRES
? 典型商用系统
– ORACLE
– SYBASE
– DB2
– SQL Server
– INFORMIX
– INGRES
第 2章 关系数据库
2.1 关系数据库概述
2.2 关系数据结构
2.3 关系的完整性
2.4 关系代数
2.5 关系演算
2.6 关系数据库管理系统
2.7 小结
2.1 关系数据库概述
?关系数据库系统是支持关系模型的数据
库系统
?关系模型的组成
– 关系数据结构
– 关系操作集合
– 关系完整性约束
1,关系数据结构
?单一的数据结构 ----关系
– 现实世界的实体以及实体间的各种联系均用
关系来表示
?数据的逻辑结构 ----二维表
– 从用户角度, 关系模型中数据的逻辑结构是
一张二维表 。
2,关系操作
?1) 常用的关系操作
?2) 关系操作的特点
?3) 关系数据语言的种类
?4) 关系数据语言的特点
关系操作 (续)
?1) 常用的关系操作
– 查询
? 选择, 投影, 连接, 除, 并, 交, 差
– 数据更新
? 插入, 删除, 修改
– 查询的表达能力是其中最主要的部分
关系操作(续)
?2) 关系操作的特点
– 集合操作方式, 即操作的对象和结果都是集
合 。
? 非关系数据模型的数据操作方式:一次一记录
? 文件系统的数据操作方式
关系操作(续)
?3) 关系数据语言的种类
– 关系代数语言
? 用 对关系的运算 来表达查询要求
? 典型代表,ISBL
关系操作(续)
? 关系数据语言的种类 ( 续 )
– 关系演算语言:用 谓词 来表达查询要求
? 元组关系演算语言
– 谓词变元的基本对象是元组变量
– 典型代表,APLHA,QUEL
? 域关系演算语言
– 谓词变元的基本对象是域变量
– 典型代表,QBE
– 具有关系代数和关系演算双重特点的语言
? 典型代表,SQL
关系操作(续)
?4) 关系数据语言的特点
– 关系语言是一种高度非过程化的语言
? 存取路径的选择由 DBMS的优化机制来完成
? 用户不必用循环结构就可以完成数据操作
– 能够嵌入高级语言中使用
– 关系代数, 元组关系演算和域关系演算三种
语言在表达能力上完全等价
3,关系的三类完整性约束
?实体完整性
– 通常由关系系统自动支持
?参照完整性
– 早期系统不支持, 目前大型系统能自动支持
?用户定义的完整性
– 反映应用领域需要遵循的约束条件, 体现了
具体领域中的语义约束
– 用户定义后由系统支持
第 2章 关系数据库
2.1 关系数据库概述
2.2 关系数据结构
2.3 关系的完整性
2.4 关系代数
2.5 关系演算
2.6 关系数据库管理系统
2.7 小结
2.2 关系数据结构
?关系模型建立在集合代数的基础上
?关系数据结构的基本概念
– 关系
– 关系模式
– 关系数据库
2.2 关系数据结构
?1.关系
?2.关系模式
?3.关系数据库
一,关系
?⒈ 域 ( Domain)
? 2,笛卡尔积 ( Cartesian Product)
? 3,关系 ( Relation)
⒈ 域( Domain)
?域 是一组具有相同数据类型的值的集合 。
– 例
? 整数
? 实数
? 指定长度的字符串集合
? 介于某个取值范围的整数
? {?男 ’, ‘ 女 ’ }
? 介于某个取值范围的日期
2,笛卡尔积( Cartesian Product)
?1) 笛卡尔积
给定一组域 D1,D2,…, Dn,这些域中可
以有相同的。 D1,D2,…, Dn的 笛卡尔积
为,
D1× D2× … × Dn=
{(d1,d2,…,dn)| di?Di,i= 1,2,…,n}
– 所有域的所有取值的一个组合
– 不能重复
笛卡尔积(续 )
例 给出三个域,
D1=SUPERVISOR ={ 张清玫, 刘逸 }
D2=SPECIALITY={计算机专业, 信息专业 }
D3=POSTGRADUATE={李勇, 刘晨, 王敏 }
则 D1,D2,D3的笛卡尔积为,
D1× D2× D3 =
{ (张清玫, 计算机专业, 李勇 ),(张清玫, 计算机专业, 刘晨 ),
(张清玫, 计算机专业, 王敏 ),(张清玫, 信息专业, 李勇 ),
(张清玫, 信息专业, 刘晨 ),(张清玫, 信息专业, 王敏 ),
(刘逸, 计算机专业, 李勇 ),(刘逸, 计算机专业, 刘晨 ),
(刘逸, 计算机专业, 王敏 ),(刘逸, 信息专业, 李勇 ),
(刘逸, 信息专业, 刘晨 ),(刘逸, 信息专业, 王敏 ) }
笛卡尔积(续 )
? 2) 元组 ( Tuple)
– 笛卡尔积中每一个元素 ( d1,d2,…, dn) 叫作一
个 n元组 ( n-tuple) 或简称 元组 。
例
? 3) 分量( Component)
– 笛卡尔积元素( d1,d2,…, dn)中的每一个值 di
叫作一个 分量 。
例
笛卡尔积(续 )
?4) 基数 ( Cardinal number)
– 若 Di( i= 1,2,…, n) 为有限集, 其基数
为 mi( i= 1,2,…, n), 则 D1× D2× …
× Dn的基数 M为,
在上例中,基数,2× 2× 3= 12,即
D1× D2× D3共有 2× 2× 3= 12个元组
mM i
n
1i ?
? ?
笛卡尔积(续 )
?5)笛卡尔积的表示方法
– 笛卡尔积可表示为一个二维表 。 表中的每行
对应一个元组, 表中的每列对应一个域 。
在上例中, 12个元组可列成一张二维表
表 2, 1 D
1
,D
2
,D
3
的笛卡尔积
S U P E R V I S O R S P E C I A L I T Y P O S T G R A D U A T E
张清玫 计 算 机 专 业 李勇
张清玫 计 算 机 专 业 刘晨
张清玫 计 算 机 专 业 王敏
张清玫 信息专业 李勇
张清玫 信息专业 刘晨
张清玫 信息专业 王敏
刘逸 计 算 机 专 业 李勇
刘逸 计 算 机 专 业 刘晨
刘逸 计 算 机 专 业 王敏
刘逸 信息专业 李勇
刘逸 信息专业 刘晨
刘逸 信息专业 王敏
笛卡尔积(续 )
表 2, 1 D
1
,D
2
,D
3
的笛卡尔积
S U P E R V I S O R S P E C I A L I T Y P O S T G R A D U A T E
张清玫 计 算 机 专 业 李勇
张清玫 计 算 机 专 业 刘晨
张清玫 计 算 机 专 业 王敏
张清玫 信息专业 李勇
张清玫 信息专业 刘晨
张清玫 信息专业 王敏
刘逸 计 算 机 专 业 李勇
刘逸 计 算 机 专 业 刘晨
刘逸 计 算 机 专 业 王敏
刘逸 信息专业 李勇
刘逸 信息专业 刘晨
刘逸 信息专业 王敏
3,关系( Relation)
?1) 关系
– D1× D2× … × Dn的子集叫作在域 D1,D2,…,
Dn上的 关系, 表示为
R( D1,D2,…, Dn)
R,关系名
n,关系的 目 或 度 ( Degree)
关系(续)
?1) 关系 (续 )
– 注意
? 关系是笛卡尔积的有限子集 。 无限关系在数据库
系统中是无意义的 。
? 由于笛卡尔积不满足交换律, 即
(d1,d2,…, dn )≠(d2,d1,…, dn )
但关系满足交换律, 即
(d1,d2, …, di, dj, …, dn) =( d1,d2, …, dj,
di,…, dn) ( i,j = 1,2,…, n)
解决方法:为关系的每个列附加一个属性名以取
消关系元组的有序性
关系(续)
例 在表 2.1 的笛卡尔积中取出有实际意义的元组
来构造关系
关系,SAP(SUPERVISOR,SPECIALITY,POSTGRADUATE)
– 关系名, 属性名
假设,导师与专业,1:1,导师与研究生,1:n
于是,SAP关系可以包含三个元组
{ (张清玫, 信息专业, 李勇 ),
(张清玫,信息专业,刘晨 ),
(刘逸,信息专业,王敏 ) }
关系(续)
? 2) 元组
– 关系中的每个元素是关系中的 元组, 通常用 t 表示 。
? 3) 单元关系与二元关系
– 当 n=1时, 称该关系为 单元 关系 ( Unary relation) 。
– 当 n=2时, 称该关系为 二元 关系 ( Binary relation) 。
关系(续)
?4) 关系的表示
– 关系也是一个二维表, 表的每行对应一个元
组, 表的每列对应一个域 。
表 2, 2 S A P 关系
S U P E R V I S O R S P E C I A L I T Y P O S T G R A D U A T E
张清玫 信息专业 李勇
张清玫 信息专业 刘晨
刘逸 信息专业 王敏
关系(续)
?5) 属性
– 关系中不同列可以对应相同的域, 为了加以
区分, 必须对每列起一个名字, 称为 属性
( Attribute) 。
– n目关系必有 n个属性 。
关系(续)
? 6) 码
– 候选码
? 若关系中的某一属性组的值能唯一地标识一个元
组, 则称该属性组为 候选码 ( Candidate key) 。
? 候选码的诸属性称为 主属性 ( Prime attribute) 。
? 不包含在任何侯选码中的属性称为非码属性
( Non-key attribute) 。
? 在最简单的情况下, 候选码只包含一个属性 。 在
最极端的情况下, 关系模式的所有属性组是这个
关系模式的候选码, 称为 全码 ( All-key) 。
关系(续)
?码 (续 )
– 主码
? 若一个关系有多个候选码, 则选定其中一个为 主
码 ( Primary key) 。
关系(续)
?7) 三类关系
– 基本关系 ( 基本表或基表 )
? 实际存在的表,是实际存储数据的逻辑表示
– 查询表
? 查询结果对应的表
– 视图表
? 由基本表或其他视图表导出的表, 是虚表, 不对
应实际存储的数据
关系(续)
?8) 基本关系的性质
– ① 列是同质的 ( Homogeneous)
? 每一列中的分量是同一类型的数据, 来自同一个
域 。
– ② 不同的列可出自同一个域
? 其中的每一列称为一个属性
? 不同的属性要给予不同的属性名
关系(续)
例,
上例中也可以只给出两个域,
人 ( PERSON) =张清玫, 刘逸, 李勇, 刘晨, 王敏
专业 ( SPECIALITY) =计算机专业, 信息专业
SAP关系的导师属性和研究生属性都从 PERSON域中取值 。
为了避免混淆, 必须给这两个属性取不同的属性名, 而不能
直接使用域名 。
例 如 定 义 导 师 属 性 名 为 SUPERVISOR-PERSON ( 或
SUPERVISOR)
研 究 生 属 性 名 为 POSTGRADUATE-PERSON ( 或
POSTGRADUATE)
SAP(SUPERVISOR-PERSON,SPECIALITY,
POSTGRADUATE-PERSON)
关系(续)
?基本关系的性质 (续 )
– ③ 列的顺序无所谓
? 列的次序可以任意交换
? 遵循这一性质的数据库产品 (如 ORACLE),增加
新属性时, 永远是插至最后一列
? 但也有许多关系数据库产品没有遵循这一性质,
例如 FoxPro仍然区分了属性顺序
关系(续)
?基本关系的性质 (续 )
– ④ 任意两个元组不能完全相同
? 由笛卡尔积的性质决定
? 但许多关系数据库产品没有遵循这一性质 。 例如
Oracle,FoxPro等都允许关系表中存在两个完全
相同的元组, 除非用户特别定义了相应的约束条
件 。
关系(续)
?基本关系的性质 (续 )
– ⑤ 行的顺序无所谓
? 行的次序可以任意交换
? 遵循这一性质的数据库产品 (如 ORACLE),插入
一个元组时永远插至最后一行
? 但也有许多关系数据库产品没有遵循这一性质,
例如 FoxPro仍然区分了元组的顺序
关系(续)
?基本关系的性质 (续 )
– ⑥ 分量必须取原子值
? 每一个分量都必须是不可分的数据项 。 这是规
范条件中最基本的一条
表 2, 3 非规范化关系
P O S T G R A D U A T E
S U P E R V I S O R
S P E C I A L I T Y
P G 1 P G 2
张清玫 信息专业 李勇 刘晨
刘逸 信息专业 王敏
二,关系模式
?1,什么是关系模式
?2.定义关系模式
?3,关系模式与关系
1.什么是关系模式
? 关系模式 ( Relation Schema) 是型, 关系是值
? 关系模式是对关系的描述
– 元组集合的结构
? 属性构成
? 属性来自的域
? 属性与域之间的映象关系
– 元组语义
– 完整性约束条件
– 属性间的数据依赖关系集合
2.定义关系模式
?关系模式可以形式化地表示为,
R( U,D,dom,F)
R 关系名
U 组成该关系的属性名集合
D 属性组 U中属性所来自的域
dom 属性向域的映象集合
F 属性间的数据依赖关系集合 。
定义关系模式 (续 )
例
在上面例子中, 由于导师和研究生出自同一
个域 ——人, 所以要取不同的属性名, 并在
模式中定义属性向域的映象, 即说明它们分
别出自哪个域, 如,
dom( SUPERVISOR-PERSON)
= dom( POSTGRADUATE-PERSON)
=PERSON
定义关系模式 (续 )
? 关系模式通常可以简记为
R (U)
或 R (A1,A2,…, An)
R 关系名
A1,A2,…, An 属性名
注:域名及属性向域的映象常常直接说明为属
性的类型, 长度 。
3,关系模式与关系
?关系模式
– 对关系的描述
– 静态的, 稳定的
?关系
– 关系模式在某一时刻的状态或内容
– 动态的, 随时间不断变化的
?关系模式和关系往往统称为关系, 通过
上下文加以区别 。
三、关系数据库
?1,关系数据库
?2,关系数据库的型与值
1,关系数据库
?在一个给定的应用领域中, 所有实体及
实体之间联系的关系的集合构成一个关
系数据库 。
2,关系数据库的型与值
?关系数据库也有型和值之分
?关系数据库的型称为关系数据库模式,
是对关系数据库的描述
– 若干域的定义
– 在这些域上定义的若干关系模式
?关系数据库的值是这些关系模式在某一
时刻对应的关系的集合, 通常简称为关
系数据库
第 2章 关系数据库
2.1 关系数据库概述
2.2 关系数据结构
2.3 关系的完整性
2.4 关系代数
2.5 关系演算
2.6 关系数据库管理系统
2.7 小结
2.3 关系的完整性
? 关系模型的完整性规则是对关系的某种约束条
件 。
? 关系模型中三类完整性约束,
– 实体完整性
– 参照完整性
– 用户定义的完整性
? 实体完整性和参照完整性是关系模型必须满足
的完整性约束条件, 被称作是关系的两个 不变
性, 应该由关系系统自动支持 。
关系的完整性 (续 )
?1,实体完整性
?2,参照完整性
?3,用户定义的完整性
一,实体完整性
?实体完整性规则 ( Entity Integrity)
– 若属性 A是基本关系 R的主属性, 则属性 A不
能取空值 。
例
SAP(SUPERVISOR,SPECIALITY,POSTGRADUATE)
POSTGRADUATE属性为主码 ( 假设研究生不会重
名 ), 则其不能取空值 。
实体完整性 (续 )
?关系模型必须遵守实体完整性规则的原因
– (1) 实体完整性规则是针对基本关系而言的 。
一个基本表通常对应现实世界的一个实体集
或多对多联系 。
– (2) 现实世界中的实体和实体间的联系都是
可区分的, 即它们具有某种唯一性标识 。
– (3) 相应地, 关系模型中以候选码作为唯一
性标识 。
实体完整性 (续 )
? 关系模型必须遵守实体完整性规则的原因 (续 )
– (4) 候选码中的属性即主属性不能取空值 。
所谓空值就是, 不知道, 或, 无意义, 的值 。
如果主属性取空值, 就说明存在某个不可标
识的实体, 即存在不可区分的实体, 这与第
(2)点相矛盾, 因此这个规则称为实体完整性 。
实体完整性 (续 )
?注意
– 实体完整性规则规定基本关系的所有主属性
都不能取空值, 而不仅是主码整体不能取空
值 。
例,
选修 ( 学号, 课程号, 成绩 )
, 学号, 课程号, 为主码,
则学号和课程号两个属性都不能取空值
二,参照完整性
?1,关系间的引用
?2,外码
?3,参照完整性规则
1,关系间的引用
?在关系模型中实体及实体间的联系都是
用关系来描述的, 因此可能存在着关系
与关系间的引用 。
例 1 学生实体, 专业实体以及专业与学生间
的一对多联系
学生 ( 学号, 姓名, 性别, 专业号, 年龄 )
专业 ( 专业号, 专业名 )
学号 姓名 性别 专 业 号 年龄
801 张三 女 01 19
802 李四 男 01 20
803 王五 男 01 20
804 赵六 女 02 20
805 钱七 男 02 19
专 业 号 专 业 名
01 信息
02 数学
03 计 算 机
学生( 学号,姓名,性别,专业号,年龄)
专业( 专业号,专业名)
关系间的引用 (续 )
例 2 学生, 课程, 学生与课程之间的多对多联系
学生 ( 学号, 姓名, 性别, 专业号, 年龄 )
课程 ( 课程号, 课程名, 学分 )
选修 ( 学号, 课程号, 成绩 )
课 程 号 课 程 名 学分
01 数 据 库 4
02 数 据 结 构 4
03 编译 4
04 P A S C A L 2
学号 姓名 性别 专 业 号 年龄
801 张三 女 01 19
802 李四 男 01 20
803 王五 男 01 20
804 赵六 女 02 20
805 钱七 男 02 19
学号 课 程 号 成绩
801 04 92
801 03 78
801 02 85
802 03 82
802 04 90
803 04 88
学生
学生选课 课程
关系间的引用 (续 )
例 3 学生实体及其内部的领导联系 (一对多 )
学生 ( 学号, 姓名, 性别, 专业号, 年龄, 班长 )
学号 姓名 性别 专 业 号 年龄 班长
801 张三 女 01 19 802
802 李四 男 01 20
803 王五 男 01 20 802
804 赵六 女 02 20 805
805 钱七 男 02 19
2.外码
?外码
– 设 F是基本关系 R的一个或一组属性, 但不
是关系 R的码 。 如果 F与基本关系 S的主码 Ks
相 对 应, 则称 F 是 基 本 关 系 R 的 外码
( Foreign Key)
– 基本关系 R 称 为 参照关系 ( Referencing
Relation)
– 基本关系 S称 为 被参照关系 ( Referenced
Relation) 或 目标关系 ( Target Relation) 。
外码 (续 )
?说明
– 关系 R和 S不一定是不同的关系 。
– 目标关系 S的主码 Ks和参照关系的外码 F必
须定义在同一个 ( 或一组 ) 域上 。
– 外码并不一定要与相应的主码同名 。
– 当外码与相应的主码属于不同关系时, 往往
取相同的名字, 以便于识别 。
?例
3,参照完整性规则
?参照完整性规则就是定义外码与主码之
间的引用规则 。
?参照完整性规则
– 若属性 ( 或属性组 ) F是基本关系 R的外码, 它与基
本关系 S的主码 Ks相对应 ( 基本关系 R和 S不一定是
不同的关系 ), 则对于 R中每个元组在 F上的值必须
为,
? 或者取空值 ( F的每个属性值均为空值 )
? 或者等于 S中某个元组的主码值 。
参照完整性规则 (续 )
?例
例 1
学生关系中每个元组的, 专业号, 属性只能
取下面两类值,
( 1) 空值, 表示尚未给该学生分配专业;
( 2) 非空值, 这时该值必须是专业关系中某
个元组的, 专业号, 值, 表示该学生不可能
分配到一个不存在的专业中 。
参照完整性规则 (续 )
例 2
由于, 学号, 和, 课程号, 是选修关系中的
主属性, 按照实体完整性和参照完整性规则,
它们只能取相应被参照关系中已经存在的主
码值 。
参照完整性规则 (续 )
例 3
―班长”属性值可以取两类值,
( 1)空值,表示该学生所在班级尚未选出班
长,或该学生本人即是班长;
( 2)非空值,这时该值必须是本关系中某个
元组的学号值。
三,用户定义的完整性
?用户定义的完整性是针对某一具体关系
数据库的约束条件, 反映某一具体应用
所涉及的数据必须满足的语义要求 。
?关系模型应提供定义和检验这类完整性
的机制, 以便用统一的系统的方法处理
它们, 而不要由应用程序承担这一功能 。
用户定义的完整性 (续 )
例
课程 (课程号, 课程名, 学分 )
– ―课程名, 属性必须取唯一值
– 非主属性, 课程名, 也不能取空值
–, 学分, 属性只能取值 {1,2,3,4}
第 2章 关系数据库
2.1 关系数据库概述
2.2 关系数据结构
2.3 关系的完整性
2.4 关系代数
2.5 关系演算
2.6 关系数据库管理系统
2.7 小结
关系代数(续)
? 1,关系代数
? 2,运算的三要素
? 3,关系代数运算的三个要素
? 4,关系代数运算的分类
? 5,表示记号
关系代数(续)
?1.关系代数
– 一种抽象的查询语言
– 用对关系的运算来表达查询
关系代数(续)
?2,运算的三要素
– 运算对象
– 运算符
– 运算结果
关系代数(续)
?3,关系代数运算的三个要素
– 运算对象:关系
– 运算结果:关系
– 运算符:四类
关系代数(续)
– 运算符 ( 续 )
? 集合运算符
– 将关系看成元组的集合
– 从关系的, 水平, 方向即行的角度来进行运
算
? 专门的关系运算符
– 不仅涉及行而且涉及列
? 算术比较符
– 辅助专门的关系运算符进行操作
? 逻辑运算符
– 辅助专门的关系运算符进行操作
集
合
运
算
符
∪
-
∩
×
并
差
交
广义笛
卡尔积
比
较
运
算
符
>
≥
<
≤
=
≠
大于
大于等于
小于
小于等于
等于
不等于
运算符 含义 运算符 含义
表 2.4 关系代数运算符
关系代数(续)
专门的
关系
运算符
σ
π
÷
选择
投影
连接
除
逻辑运
算符
?
∧
∨
非
与
或
运算符 含义 运算符 含义
表 2.4 关系代数运算符(续)
关系代数(续)
关系代数(续)
?4.关系代数运算的分类
– 传统的集合运算
? 并, 差, 交, 广义笛卡尔积
– 专门的关系运算
? 选择, 投影, 连接, 除
关系代数(续)
?5.表示记号
– ( 1) R,t?R,t[Ai]
设关系模式为 R(A1,A2,…, An)。它的一
个关系设为 R。 t?R表示 t是 R的一个元组。
t[Ai]则表示元组 t中相应于属性 Ai的一个分量。
关系代数(续)
– ( 2) A,t[A],A
若 A={Ai1,Ai2,…, Aik},其中 Ai1,Ai2,…,
Aik是 A1,A2,…, An中的一部分,则 A称为
属性列或域列。 t[A]=(t[Ai1],t[Ai2],…,
t[Aik])表示元组 t在属性列 A上诸分量的集合。
A则表示 {A1,A2,…, An}中去掉 {Ai1,
Ai2,…, Aik}后剩余的属性组。
关系代数(续)
– ( 3) tr ts
R为 n目关系,S为 m目关系。 tr ?R,ts?S,
tr ts称为元组的连接。它是一个 n + m列的元
组,前 n个分量为 R中的一个 n元组,后 m个
分量为 S中的一个 m元组。
关系代数(续)
– 4) 象集 Zx
给定一个关系 R( X,Z), X和 Z为属性组 。
当 t[X]=x时, x在 R中的 象集 ( Images Set)
为,
Zx={t[Z]|t ?R,t[X]=x}
它表示 R中属性组 X上值为 x的诸元组在 Z上
分量的集合。
2.4 关系代数
? 2.4.1 传统的集合运算
? 2.4.2 专门的关系运算
2.4 关系代数
? 2.4.1 传统的集合运算
? 2.4.2 专门的关系运算
2.4.1 传统的集合运算
? 并
? 差
? 交
? 广义笛卡尔积
1,并( Union)
?R和 S
– 具有相同的目 n( 即两个关系都有 n个属性 )
– 相应的属性取自同一个域
?R∪ S
– 仍为 n目关系, 由属于 R或属于 S的元组组成
R∪ S = { t|t ? R∨ t ?S }
并 (续 )
A B C
a1 b1 c1
a1 b2 c2
a2 b2 c1
A B C
a1 b1 c1
a1 b2 c2
a1 b3 c2
a2 b2 c1
A B C
a1 b2 c2
a1 b3 c2
a2 b2 c1
R
S
R∪ S
2,差( Difference)
?R和 S
– 具有相同的目 n
– 相应的属性取自同一个域
?R - S
– 仍为 n目关系, 由属于 R而不属于 S的所有元
组组成
R -S = { t|t?R∧ t?S }
差 (续 )
A B C
a1 b1 c1
a1 b2 c2
a2 b2 c1 A B C
a1 b1 c1
A B C
a1 b2 c2
a1 b3 c2
a2 b2 c1
R
S
R-S
3,交( Intersection)
?R和 S
– 具有相同的目 n
– 相应的属性取自同一个域
?R∩S
– 仍为 n目关系, 由既属于 R又属于 S的元组组
成
R∩S = { t|t ? R∧ t ?S }
R∩S = R –(R-S)
交 (续 )
A B C
a1 b1 c1
a1 b2 c2
a2 b2 c1
A B C
a1 b2 c2
a2 b2 c1
A B C
a1 b2 c2
a1 b3 c2
a2 b2 c1
R
S
R ∩ S
4,广义笛卡尔积( Extended Cartesian Product)
?R
– n目关系, k1个元组
?S
– m目关系, k2个元组
?R× S
– 列,( n+m) 列的元组的集合
? 元组的前 n列是关系 R的一个元组
? 后 m列是关系 S的一个元组
– 行,k1× k2个元组
? R× S = {tr ts |tr ?R ∧ ts?S }
广义笛卡尔积 (续 )
A B C
a1 b1 c1
a1 b2 c2
a2 b2 c1
A B C
a1 b2 c2
a1 b3 c2
a2 b2 c1
R
S
R × S
A B C A B C
a1 b1 c1 a1 b2 c2
a1 b1 c1 a1 b3 c2
a1 b1 c1 a2 b2 c1
a1 b2 c2 a1 b2 c2
a1 b2 c2 a1 b3 c2
a1 b2 c2 a2 b2 c1
a2 b2 c1 a1 b2 c2
a2 b2 c1 a1 b3 c2
a2 b2 c1 a2 b2 c1
2.4 关系代数
? 2.4.1 传统的集合运算
? 2.4.2 专门的关系运算
2.4.2 专门的关系运算
? 选择
? 投影
? 连接
? 除
1,选择( Selection)
? 1) 选择又称为限制 ( Restriction)
? 2) 选择运算符的含义
– 在关系 R中选择满足给定条件的诸元组
σF(R) = {t|t?R∧ F(t)= '真 '}
– F:选择条件, 是一个逻辑表达式, 基本形式为,
[?( ] X1θY1 [ )][φ [?( ] X2θY2 [ )]]…
? θ:比较运算符 ( >, ≥,<, ≤,=或 <>)
? X1,Y1等:属性名, 常量, 简单函数;属性名也可以用
它的序号来代替;
? φ:逻辑运算符 ( ∧ 或 ∨ )
? [ ]:表示任选项
? …,表示上述格式可以重复下去
选择(续)
?3) 选择运算是从行的角度进行的运算
?4) 举例
设有一个学生 -课程数据库, 包括学生关系
Student,课程关系 Course和选修关系 SC。
σ
选择(续)
学 号
Sno
姓 名
Sname
性 别
Ssex
年 龄
Sage
所 在
系
Sdept
95001 李勇 男 20 CS
95002
刘晨
女
19
IS
95003
王敏
女
18
MA
95004
张立
男
19
IS
(a)
Student
例 1 例 2 例 4 例 3 例 9
选择(续)
(b)
Course
课程号 课程名
先行课
学分
Cno
Cname
Cpno
Ccredit
1
数据库
5
4
2
数学
2
3
信息系统
1
4
4
操作系统
6
3
5
数据结构
7
4
6
数据处理
2
7
PASCAL语言
6
4
例 9
选择(续)
(c)
SC
学 号
课 程 号
成 绩
Sno
Cno
Grade
95001
1
92
95001
2
85
95001
3
88
95002
2
90
95002
3
80
例 7 例 9
选择(续)
[例 1] 查询信息系 ( IS系 ) 全体学生
σSdept = 'IS' (Student)
或 σ5 ='IS' (Student)
结果,
Sno
Sname
Ssex
Sage
Sdept
95002
刘晨
女
19
IS
95004
张立
男
19
IS
选择(续)
[例 2] 查询年龄小于 20岁的学生
σSage < 20(Student)
或 σ4 < 20(Student)
结果,
Sno
Sname
Ssex
Sage
Sdept
95002
刘晨
女
19
IS
95003
王敏
女
18
MA
95004
张立
男
19
IS
2,投影( Projection)
?1) 投影运算符的含义
– 从 R中选择出若干属性列组成新的关系
πA(R) = { t[A] | t ?R }
A,R中的属性列
2,投影( Projection)
?2) 投影操作主要是从列的角度进行运算
– 但投影之后不仅取消了原关系中的某些列,
而且还可能取消某些元组 ( 避免重复行 )
π
投影(续)
?3) 举例
[例 3] 查询学生的姓名和所在系
即求 Student关系上学生姓名和所在系两个
属性上的投影
πSname,Sdept(Student)
或 π2,5(Student)
结果,
投影(续)
Sname Sdept
李勇 CS
刘晨 IS
王敏 MA
张立 IS
投影(续)
[例 4] 查询学生关系 Student中都有哪些系
πSdept(Student)
结果,Sdept
CS
IS
MA
3,连接( Join)
? 1) 连接也称为 θ连接
? 2) 连接运算的含义
– 从两个关系的笛卡尔积中选取属性间满足
一定条件的元组
R S = { | tr ? R∧ ts ?S∧ tr[A]θts[B] }
? A和 B,分别为 R和 S上度数相等且可比的属性组
? θ:比较运算符
– 连接运算从 R和 S的广义笛卡尔积 R× S中选
取( R关系)在 A属性组上的值与( S关系)
在 B属性组上值满足比较关系的元组。
AθB tr ts
连接 (续 )
?3)两类常用连接运算
– 等值连接( equijoin)
? 什么是等值连接
– θ为“=”的连接运算称为等值连接
? 等值连接的含义
– 从关系 R与 S的广义笛卡尔积中选取 A,B属性
值相等的那些元组, 即等值连接为,
R S = { | tr ?R∧ ts ?S∧ tr[A] = ts[B] } A=B tr ts
连接 (续 )
– 自然连接 ( Natural join)
? 什么是自然连接
– 自然连接是一种特殊的等值连接
?两个关系中进行比较的分量必须是相同
的属性组
?在结果中把重复的属性列去掉
? 自然连接的含义
R和 S具有相同的属性组 B
R S = { | tr ?R∧ ts ?S∧ tr[B] = ts[B] } tr ts
连接 (续 )
?4) 一般的连接操作是从行的角度进行运
算 。
自然连接还需要取消重复列,所以是
同时从行和列的角度进行运算。
AθB
R
S
连接 (续 )
?5)举例
[例 5]
A B C
a1 b1 5
a1 b2 6
a2 b3 8
a2 b4 12
B
E
b
1
3
b
2
7
b
3 10
b3
2
b
5
2
R S
连接 (续 )
R S
A
R.B
C
S.B
E
a1
b1
5
b2
7
a
1
b1
5
b3
10
a
1
b2
6
b2
7
a
1
b2
6
b3
10
a
2
b3
8
b3
10
C< E
连接 (续 )
等值连接 R S
R.B=S.B
A
R.B
C
S.B
E
a1
b1
5
b1
3
a1
b2
6
b2
7
a2
b3
8
b3
10
a2
b3
8
b3
2
连接 (续 )
自然连接 R S
A
B
C
E
a1
b1
5
3
a1
b2
6
7
a2
b3
8
10
a2
b3
8
2
4,除( Division)
? 1) 除运算的含义
– 给定关系 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]
除 (续 )
?2) 除操作是同时从行和列角度进行运算
?3) 举例
[例 6]
÷
R
S
除 (续 )
A
B
C
a1
b1
c2
a
2
b3
c7
a
3
b4
c6
a
1
b2
c3
a
4
b6
c6
a
2
b2
c3
a
1
b2
c1
B
C
D
b1
c2
d1
b2
c1
d1
b2
c3
d2
R÷ S
A
a
1
R
S
除 (续 )
-分析,
– 在关系 R中, A可以取四个值 {a1,a2,a3,a4}。
a1的象集为 {(b1,c2),(b2,c3),(b2,c1)}
a2的象集为 {(b3,c7),(b2,c3)}
a3的象集为 {(b4,c6)}
a4的象集为 {(b6,c6)}
– S在 (B,C)上的投影为 {(b1,c2),(b2,c1),(b2,c3) }
– 只有 a1的象集 (B,C)a1包含了 S在 (B,C)属性组上的
投影,所以 R÷ S ={a1}
5.综合举例
以学生 -课程数据库为例
[例 7] 查询至少选修 1号课程和 3号课程的学生号
码 。
首先建立一个临时关系 K,
然后求,πSno,Cno(SC)÷ K
Cno
1
3
综合举例 (续 )
? 例 7续 πSno.Cno(SC)
95001象集 {1,2,3};
95002象集 {2,3}
πCno(K)={1,3}
于是,πSno.Cno(SC)÷ K={95001}
Sno
Cno
95001
1
95001
2
95001
3
95002
2
95002
3
综合举例 (续 )
[例 8] 查询选修了 2号课程的学生的学号 。
πSno( σCno='2'( SC)) = { 95001,95002}
综合举例 (续 )
[例 9] 查询至少选修了一门其直接先行课为 5号课
程的课程的学生姓名 。
πSname(σCpno='5'(Course SC Student))
或
πSname(σCpno='5'(Course) SC πSno,Sname(Student))
或
πSname (πSno (σCpno='5' (Course) SC) πSno,Sname (Student))
综合举例 (续 )
[例 10] 查询选修了全部课程的学生号码和姓名 。
πSno,Cno( SC) ÷ πCno( Course) πSno,Sname( Student)
小结
? 关系代数运算
– 关系代数运算
并, 差, 交, 笛卡尔积, 投影, 选择, 连接, 除
– 基本运算
并, 差, 笛卡尔积, 投影, 选择
– 交, 连接, 除
可以用 5种基本运算来表达
引进它们并不增加语言的能力, 但可以简化表达
小结 (续 )
? 关系代数表达式
– 关系代数运算经有限次复合后形成的式子
? 典型关系代数语言
– ISBL( Information System Base Language)
? 由 IBM United Kingdom研究中心研制
? 用于 PRTV( Peterlee Relational Test Vehicle)
实验系统
第 2章 关系数据库
2.1 关系数据库概述
2.2 关系数据结构
2.3 关系的完整性
2.4 关系代数
2.5 关系演算
2.6 关系数据库管理系统
2.7 小结
2.5 关系演算
?关系演算
– 以数理逻辑中的谓词演算为基础
?种类:按谓词变元不同分类
– 元组关系演算:以元组变量作为谓词变元的
基本对象
– 域关系演算:以域变量作为谓词变元的基本
对象
2.5 关系演算
?2.5.1 元组关系演算语言 ALPHA
?2.5.2 域关系演算语言 QBE
2.5 关系演算
?2.5.1 元组关系演算语言 ALPHA
?2.5.2 域关系演算语言 QBE
2.5.1 元组关系演算语言 ALPHA
? 一种典型的元组关系演算语言, 但未实际实现
– 由 E.F.Codd提出
– INGRES所用的 QUEL语言是参照 ALPHA语言研制
的
? 语句
– 检索语句
? GET
– 更新语句
? PUT,HOLD,UPDATE,DELETE,DROP
一、检索操作
? 语句格式,
GET 工作空间名 [( 定额 ) ]( 表达式 1)
[,操作条件 ] [DOWN/UP 表达式 2]
– 定额:规定检索的元组个数
? 格式,数字
– 表达式 1:指定语句的操作对象
? 格式,
关系名 | 关系名, 属性名 | 元组变量, 属性名 | 集函数 [,… ]
– 操作条件:将操作结果限定在满足条件的元组中
? 格式,逻辑表达式
– 表达式 2:指定排序方式
? 格式,关系名, 属性名 | 元组变量, 属性名 [,… ]
检索操作 (续 )
?种类
– (1) 简单检索 (即不带条件的检索 )
– (2) 限定的检索 (即带条件的检索 )
– (3) 带排序的检索
– (4) 带定额的检索
– (5) 用元组变量的检索
– (6) 用存在量词的检索
检索操作 (续 )
– (7) 带有多个关系的表达式的检索
– (8) 用全称量词的检索
– (9) 用两种量词的检索
– (10) 用蕴函 ( Implication) 的检索
– (11) 集函数
( 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
[例 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 关系名 变量名
– 一个关系可以设多个元组变量
用元组变量的检索 (续 )
[例 7] 查询信息系学生的名字 。
RANGE Student X
GET W (X.Sname),X.Sdept='IS'
(6) 用存在量词的检索
[例 8] 查询选修 2号课程的学生名字 。
RANGE SC X
GET W (Student.Sname),?X(X.Sno=Student.Sno∧ X.Cno='2')
[例 9] 查询选修了这样课程的学生学号, 其直
接先行课是 6号课程 。
RANGE Course CX
GET W (SC.Sno),?CX (CX.Cno=SC.Cno∧ CX.Pcno='6')
用存在量词的检索 (续 )
[例 10] 查询至少选修一门其先行课为 6号课程的
学生名字 。
RANGE Course CX
SC SCX
GET W (Student.Sname),?SCX (SCX.Sno=Student.Sno∧
?CX (CX.Cno=SCX.Cno∧ CX.Pcno='6'))
前束范式形式,
GET W (Student.Sname),?SCX?CX (SCX.Sno=Student.Sno∧
CX.Cno=SCX.Cno∧ CX.Pcno='6')
( 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),??SCX
(SCX.Sno=Student.Sno∧ SCX.Cno='1')
?
( 9)用两种量词的检索
[例 13] 查询选修了全部课程的学生姓名 。
RANGE Course CX
SC SCX
GET W (Student.Sname),CX?SCX
(SCX.Sno=Student.Sno∧
SCX.Cno=CX.Cno)
?
( 10)用蕴函( Implication)的检索
[例 14] 查询最少选修了 95002学生所选课程的
学生学号 。
RANGE Couse CX
SC SCX
SC SCY
GET W (Student.Sno),CX(?SCX
(SCX.Sno='95002'∧ SCX.Cno=CX.Cno)
?SCY(SCY.Sno=Student.Sno∧
SCY.Cno= CX.Cno))
?
( 11)集函数
?常用集函数 ( Aggregation function) 或
内部函数 ( Build-in function)
函 数 名
功 能
COUNT
对元组计数
TOTAL
求 总 和
MAX
求最大值
MIN
求最小值
AVG
求平均值
集函数 (续 )
[例 15] 查询学生所在系的数目 。
GET W (COUNT(Student.Sdept))
COUNT函数在计数时会自动排除重复值 。
[例 16] 查询信息系学生的平均年龄 。
GET W (AVG(Student.Sage)),
Student.Sdept='IS'
二、更新操作
?(1) 修改操作
?(2) 插入操作
?(3) 删除操作
( 1)修改操作
? 步骤
① 用 HOLD语句将要修改的元组从数据库中读到工作
空间中
HOLD 工作空间名 ( 表达式 1) [,操作条件 ]
HOLD语句是带上并发控制的 GET语句
② 用宿主语言修改工作空间中元组的属性
③ 用 UPDATE语句将修改后的元组送回数据库中
UPDATE 工作空间名
修改操作 (续 )
[例 17] 把 95007学生从计算机科学系转到信息系 。
HOLD W (Student.Sno,Student.Sdetp),
Student.Sno='95007'
( 从 Student关系中读出 95007学生的数据 )
MOVE 'IS' TO W.Sdept
( 用宿主语言进行修改 )
UPDATE W
( 把修改后的元组送回 Student关系 )
更新操作 (续 )
?修改关系主码
– ALPHA语言不允许直接修改主码 。
例如不能用 UPDATE语句将学号 95001改为 95102
– 间接修改主码值的方法:删除 +插入
? 先用删除操作删除该元组
? 再把具有新主码值的元组插入到关系中
( 2)插入操作
?步骤
– ① 用宿主语言在工作空间中建立新元组
– ② 用 PUT语句把该元组存入指定关系中
PUT 工作空间名 ( 关系名 )
?PUT语句只对一个关系操作
插入操作 (续 )
[例 18] 学校新开设了一门 2学分的课程, 计算机
组织与结构,, 其课程号为 8,直接先行课为 6
号课程 。 插入该课程元组 。
MOVE '8' TO W.Cno
MOVE '计算机组织与结构 ' TO W.Cname
MOVE '6' TO W.Cpno
MOVE '2' TO W.Ccredit
PUT W (Course)
( 3)删除操作
?步骤
① 用 HOLD语句把要删除的元组从数据库中
读到工作空间中
② 用 DELETE语句删除该元组
DELETE 工作空间名
删除操作 (续 )
[例 19] 95110学生因故退学, 删除该学生元组 。
HOLD W (Student),Student.Sno='95110'
DELETE W
删除操作 (续 )
[例 20] 将学号 95001改为 95102。
HOLD W (Student),Student.Sno='95001'
DELETE W
MOVE '95102' TO W.Sno
MOVE '李勇 ' TO W.Sname
MOVE '男 ' O W.Ssex
MOVE '20' TO W.Sage
MOVE 'CS' TO W.Sdept
PUT W (Student)
删除操作 (续 )
?在删除操作中保持参照完整性
– 删除被参照关系时,必须首先删除参照关系
中的相应元组
? 手工删除
? 由 DBMS自动执行
删除操作 (续 )
[例 21] 删除全部学生 。
HOLD W (SC)
DELETE W
HOLD W (Student)
DELETE W
元组关系演算语言 ALPHA
?检索操作 GET
GET 工作空间名 [( 定额 ) ]( 表达式 1)
[,操作条件 ] [DOWN/UP 表达式 2]
?插入操作
– 建立新元组 --PUT
?修改操作
– HOLD--修改 --UPDATE
?删除操作
– HOLD--DELETE
2.5 关 系 演 算
?2.5.1 元组关系演算语言 ALPHA
?2.5.2 域关系演算语言 QBE
2.5.2 域关系演算语言 QBE
? 一种典型的域关系演算语言
– 由 M.M.Zloof提出
– 1978年在 IBM370上得以实现
– QBE也指此关系数据库管理系统
? QBE,Query By Example
基于屏幕表格的查询语言
– 查询要求:以填写表格的方式构造查询
? 用示例元素 (域变量 )来表示查询结果可能的情况
– 查询结果:以表格形式显示
域关系演算语言 QBE (续)
? QBE操作框架
关系名 属性名
操作命令 元组属性值或查询条件或操作命令
一、检索操作
?操作步骤
( 1) 用户提出要求;
( 2) 屏幕显示空白表格;
( 3) 用户在最左边一栏输入要查询的关系名,
例如 Student;
Student
检索操作(续)
( 4)系统显示该关系的属性名
( 5)用户在上面构造查询要求
Student
Sno
Sname
Ssex
Sage
Sdept
P,T
AO,C
Student
Sno
Sname
Ssex
Sage
Sdept
检索操作(续)
( 6)屏幕显示查询结果
Student
Sno
Sname
Ssex
Sage
Sdept
李勇 张立
C
检索操作(续)
?构造查询的几个要素
– 示例元素 即域变量 一定要加下划线 。
? 示例元素是该域中的一个可能取值, 它不必是查
询结果中的元素 。 例如要查信息系的学生姓名,
只要给出任意的一个学生名即可, 而不必真是信
息系的某个学生名 。
– 打印操作符 P,指定查询结果所含属性列
– 查询条件 不用加下划线。
? 可使用比较运算符>,≥,<,≤,=和 ≠。其中
=可以省略。
– 排序要求 AO./DO,
检索操作(续)
?检索操作的主要类型
– 1,简单查询
– 2,条件查询
– 3,集函数
– 4,对查询结果排序
1,简单查询
[例 1] 查询全体学生的全部数据 。
Student
Sno
Sname
Ssex
Sage
Sdept
P.95001 P,李勇 P.男 P.20 P.CS
简单查询(续)
显示全部数据也可以简单地把 P.操作符作
用在关系名上 。
Student
Sno
Sname
Ssex
Sage
Sdept
P,
2,条件查询
?(1) 简单条件
?(2) 不同属性条件的与
?(3) 同一属性条件的与
?(4) 或条件
?(5) 多表连接
?(6) 非条件
2,条件查询
?(1) 简单条件
[例 2] 求信息系全体学生的姓名 。
Student
Sno
Sname
Ssex
Sage
Sdept
P,李勇
IS
条件查询(续)
[例 3] 求年龄大于 19岁的学生的学号 。
Student
Sno
Sname
Ssex
Sage
Sdept
P.95001
>19
条件查询(续)
?(2) 不同属性条件的与
– 表示方法
? 把两个条件写在 同一行 上;
? 把两个条件写在 不同行 上, 但使用 相同 的
示例元素值 。
条件查询(续)
[例 4] 求计算机科学系年龄大于 19岁的学
生的学号 。
方法 ( 1),把两个条件写在同一行上
Student
Sno
Sname
Ssex
Sage
Sdept
P.95001
>19 CS
条件查询(续)
方法 ( 2),把两个条件写在不同行上, 但使用
相同的示例元素值
注:对于多行条件的查询, 先输入哪一行是
任意的, 查询结果相同 。
Student
Sno
Sname
Ssex
Sage
Sdept
P.95001 P.95001
>19
CS
条件查询(续)
?(3) 同一属性条件的与
– 表示方法
? 把两个条件写在不同行上, 但使用 相同 的
示例元素值 。
条件查询(续)
[例 5] 查询既选修了 1号课程又选修了 2号课程
的学生的学号 。
SC
Sno
Cno
Grade
P.95001 P.95001
1
2
条件查询(续)
?(4) 或条件
– 表示方法
? 把两个条件写在不同行上, 并且使用 不同
的示例元素值 。
条件查询(续)
[例 6] 查询计算机科学系或者年龄大于 19岁的
学生的学号 。
Student
Sno
Sname
Ssex
Sage
Sdept
P.95001 P.95002
>19
CS
条件查询(续)
?(5) 多表连接
– 表示方法
? 通过 相同的连接属性值 来把多个关系连接
起来
条件查询(续)
[例 7] 查询选修 1号课程的学生姓名 。
注意:示例元素 Sno是连接属性,其值在两个
表中要相同。
SC
Sno
Cno
Grade
95001 1
Student
Sno
Sname
Ssex
Sage
Sdept
95001 P.李勇
条件查询(续)
?(6) 非条件
– 表示方法
? 将逻辑非写在关系名下面
条件查询(续)
[例 8] 查询未选修 1号课程的学生姓名
思路:显示学号为 95001的学生名字, 而该学生
选修 1号课程的情况为假 。
SC
Sno
Cno
Grade
95001 1
?
Student
Sno
Sname
Ssex
Sage
Sdept
95001 P.李勇
条件查询(续)
[例 9] 查询有两个人以上选修的课程号 。
思路:查询这样的课程 1,它不仅被 95001选
修, 而且也被另一个学生 ( ?95001) 选修
了 。
SC
Sno
Cno
Grade
95001 ?95001
P.1
1
3,集函数
?常用集函数,
函 数 名
功 能
CNT
对元组计数
SUM
求 总 和
AVG
求平均值
MAX
求最大值
MIN
求最小值
集函数(续)
[例 10] 查询信息系学生的平均年龄 。
Student
Sno
Sname
Ssex
Sage
Sdept
P.AVG.ALL,IS
4,对查询结果排序
? 排序要求
– 按单个属性值排序
? 升序,AO,
? 降序,DO,
– 按多个属性值排序
? 升序,AO(i),
i为排序的优先级, i值越小, 优先级越高 。
? 降序,DO(i),
对查询结果排序 (续)
[例 11] 查全体男生的姓名, 要求查询结果
按所在系升序排序, 对相同系的学生按
年龄降序排序 。
Student
Sno
Sname
Ssex
Sage
Sdept
P.李勇 男 DO( 2), AO( 1),
检索操作小结
?四类检索操作
– 1,简单查询
– 2,条件查询
– 3,集函数
– 4,对查询结果排序
检索操作小结 (续 )
? 条件查询
– 简单条件
– 与条件
? 不同属性条件的与
? 同一属性条件的与
– 或条件
– 非条件
– 多表连接
检索操作小结(续)
?构造查询的几个要素
– 示例元素
– 打印操作符 P,
– 查询条件
– 排序要求
检索操作小结(续)
?何时需要使用示例元素
– 当打印操作符 P,位于属性列上时
– 表示进行连接操作时
二,更新操作
?1,修改操作
?2,插入操作
?3,删除操作
1,修改操作
?修改操作符
– U,
?关系的主码不允许直接修改
– 间接修改
? 先删除该元组
? 然后再插入新的主码的元组
修改操作 (续 )
?两类修改操作
– (1) 简单修改操作
– (2) 涉及表达式的修改操作
修改操作 (续 )
? (1) 简单修改操作
– 两种表示方法
? 1) 将操作符, U.‖放在值上
? 2) 将操作符, U.‖放在关系上
– 必须用主码指定要修改的元组
– 不一定需要使用示例元素
修改操作 (续 )
[例 12] 把 95001学生的年龄改为 18岁 。
方法 (1),将操作符, U.‖放在值上
Student
Sno
Sname
Ssex
Sage
Sdept
95001
U,18
修改操作 (续 )
方法 (2),将操作符, U.‖放在关系上
码 95001标明要修改的元组 。, U.‖标明所在的
行是修改后的新值 。
由于主码是不能修改的, 所以系统不会混淆
要修改的属性 。
Student
Sno
Sname
Ssex
Sage
Sdept
U,
95001
18
修改操作 (续 )
[例 13] 将计算机科学系所有学生的年龄都改
为 18岁 。
Student
Sno
Sname
Ssex
Sage
Sdept
95008
U.18
CS
修改操作 (续 )
?(2) 涉及表达式的修改操作
– 表示方法
? 分两行分别表示改前和改后的示例元素,
并且必须将操作符, U.‖放在关系上 。
– 必须使用示例元素
修改操作 (续 )
[例 14] 把 95001学生的年龄增加 1岁 。
Student
Sno
Sname
Ssex
Sage
Sdept
U,
95001
95001
17 17+1
修改操作 (续 )
[例 15] 将计算机科学系所有学生的年龄都增
加 1岁 。
Student
Sno
Sname
Ssex
Sage
Sdept
U,
95008
95008
18 18+1
CS
2,插入操作
?插入操作符
– I,
?新插入的元组必须具有码值, 其他属性
值可以为空 。
插入操作(续)
[例 16] 把信息系女生 95701,姓名张三, 年龄
17岁存入数据库中 。
Student
Sno
Sname
Ssex
Sage
Sdept
I,
95701
张三
女
17
IS
3,删除操作
?删除操作符
– D,
[例 17] 删除学生 95089。
Student
Sno
Sname
Ssex
Sage
Sdept
D,
95089
删除操作 (续)
?保持参照完整性
– DBMS自动保持
– 手工保持
? 由于 SC关系与 Student关系之间具有参照关系,
为保证参照完整性, 删除 95089学生 前, 先删除
95089学生选修的全部课程 。
SC
Sno
Cno
Grade
D,
95089
第 2章 关系数据库
2.1 关系数据库概述
2.2 关系数据结构
2.3 关系的完整性
2.4 关系代数
2.5 关系演算
2.6 关系数据库管理系统
2.7 小结
2.6 关系数据库管理系统
?关系数据库管理系统简称为关系系统,
指支持关系模型的系统。但由于关系模
型中并不是每一部分都是同等重要的,
所以不苛求一个实际的关系系统必须完
全支持关系模型。
?一个关系系统至少支持,
– 关系数据库(即关系数据结构)
– 支持选择、投影和(自然)连接运算
关系数据库管理系统(续)
?根据 E.F.Codd的思想,关系系统分为四
类
– 表式系统
– (最小)关系系统
– 关系完备系统
– 完全关系系统
第 2章 关系数据库
2.1 关系数据库概述
2.2 关系数据结构
2.3 关系的完整性
2.4 关系代数
2.5 关系演算
2.6 关系数据库管理系统
2.7 小结
2.6 小结
?关系数据模型的重要概念
– 数据结构
– 关系操作
– 关系的完整性
小结 (续 )
?关系数据结构
– 关系
? 域
? 笛卡尔积
? 关系
– 关系,属性,元组
– 候选码,主码,主属性
– 基本关系的性质
– 关系模式
– 关系数据库
小结 (续 )
?关系操作
– 常用关系操作
? 查询
– 选择、投影、连接、除、并、交、差
? 数据更新
– 插入、删除、修改
小结 (续 )
– 关系数据语言
? 用代数方式来表达的关系语言
–关系代数
? 用逻辑方式来表达的关系语言
–元组关系演算 (ALPHA)
–域关系演算 (QBE)
小结 (续 )
?关系的完整性
– 实体完整性
– 参照完整性
? 外码
– 用户定义的完整性