第 二 章 关系数据库

102
2.1 关关关关关关关关关关 关关关关关关关关关关 2.2 关关关关关关关关 关关关关关关关关 2.3 关关关关 关关关关 2.4 关关关关 第第第 关关关关关 关关关关关 关关关关

description

第 二 章 关系数据库. 2.1 关系数据库的基本概念. 2.2 关系模型及其描述. 2.3 关系代数. 2.4 关系演算. 本章小结. 1 、关系 及其性质 ( 1 ) 域 定义 2.1: 域是一组具有相同数据类型的值的集合。. 2.1 关系数据库的基本概念. 例:. 在关系中用域来表示属性的取值范围 域中所包含的值的个数称 域的基数 ( 用 m 表示 ). 例: D 1 ={ A , 2 , 3 , … , Q , K } M 1 = 13 - PowerPoint PPT Presentation

Transcript of 第 二 章 关系数据库

Page 1: 第 二 章 关系数据库

2.1 关系数据库的基本概念 关系数据库的基本概念

2.2 关系模型及其描述关系模型及其描述

2.3 关系代数关系代数

2.4 关系演算

第二章 关系数据库关系数据库

本章小结

Page 2: 第 二 章 关系数据库

2.1 2.1 关系数据库的基本概念关系数据库的基本概念 1 、关系及其性质 ( 1 )域 定义 2.1: 域是一组具有相同数据类型的值的集合。

例:

在关系中用域来表示属性的取值范围在关系中用域来表示属性的取值范围 域中所包含的值的个数称域中所包含的值的个数称域的基数域的基数 ((用用 mm 表表示示 ))

例:例: DD11={={A , 2 , 3 , … , Q , K } M} M11= 13= 13

DD22=={ 数据库原理,面向对象数据库技术 } MM22= 2= 2

Page 3: 第 二 章 关系数据库

2.1 2.1 关系数据库的基本概念关系数据库的基本概念 ( 2 )笛卡尔积 定义 2.2: 给定一组域 D1,…,Dn ( 可有相同的域 ) 。其笛卡尔积为: D1×D2×…×Dn={(d1, d2,…, dn) | di∈Di,

i=1,2…,n}n 元

di 为分量

例:

笛卡儿积也是一个集合笛卡儿积也是一个集合 其中每一个元素其中每一个元素 (d1(d1,, d2d2,,……,, dn)dn) 叫作一个叫作一个 nn 元组元组 (n-(n-

Tuple),Tuple),

或简称为元组。元素中的每一个值或简称为元组。元素中的每一个值 didi 叫作一个分量(叫作一个分量( ComponenComponen

tt )。)。

若 Di( i= 1, 2,…, n )为有限集,其基数( Cardinal

number )为 mi( i= 1, 2,…, n ),则 D1×D2×…×Dn 的基数

为:

m= ∏ mi i=1

n

Page 4: 第 二 章 关系数据库

定义 2.3 D1×D2×…×Dn 的有意义的子集称为在域 D1 ,D2,…,Dn 上的关系,

记为 R(DR(D11,D,D22,…,D,…,D

nn)) 。其中: RR 为关系的名; n 为关系的度(目); r R∈r R∈ 表示 r r 是 R R 中的元组。

子集元素是关系中的元组;

关系中的元组个数是关系的基数 ;

同样可以把关系看作是一个二维表: 每一行对应一个元组; 表的每一列对应一个域,每个域起一个名字——称为属性 ;

2.1 2.1 关系数据库的基本概念关系数据库的基本概念 ( 3 )关系

Page 5: 第 二 章 关系数据库

例例

例:设 D1= 男人集合 (MAN) = { 王强、李东、张兵 }

D2 = 女人集合 (WOMAN) = { 赵红、吴芳 }

D3= 儿童集合 (CHILD) = { 王一、李一、李二 }

( 1 )求上面三个集合的笛卡儿积

M W C王强 赵红 王一

王强 赵红 李一

王强 赵红 李二

王强 吴芳 王一

王强 吴芳 李一

王强 吴芳 李二

李东 赵红 王一

李东 赵红 李一

李东 赵红 李二

李东 吴芳 王一

李东 吴芳 李一

李东 吴芳 李二

张兵 赵红 王一

张兵 赵红 李一

张兵 赵红 李二

张兵 吴芳 王一

张兵 吴芳 李一

张兵 吴芳 李二李二李二吴芳吴芳李东李东

李一李一吴芳吴芳李东李东

王一王一赵红赵红王强王强CHILDCHILDWOMANWOMANMANMAN

FamilyFamily

( 2 )构造一个家庭关系,可表示为:

FAMILY(MAN,WOMAN, CHILD )

2.1 2.1 关系数据库的基本概念关系数据库的基本概念

Page 6: 第 二 章 关系数据库

若关系 R 整个属性的集合是 R 的候选码,则该候选码为全码。

一个关系有多个候选码时,选定其中的一个作为主码。

关系 R 的某一属性组 X 不是 R 的码,但是是是其它某一关系的码,称 X为 R 的外码。

主码 (primary key)

外码 (foreign key)

全码 (all key)

值能唯一标识一个元组的属性组,且不含多余属性,称该属性组为候选码。

候选码 (candidate key)

( 4 )关系中常用术语 候选码 主码 外码 全码

2.1 2.1 关系数据库的基本概念关系数据库的基本概念

Page 7: 第 二 章 关系数据库

2.1 2.1 关系数据库的基本概念关系数据库的基本概念

S(Sno, Cardno, Dno, Sname, Sage, …)

D(Dno, Dname, Location)

候选码

主码

主码

外码

9801 01 959801 02 809802 01 889802 03 929803 02

Sno Cno Grade

80……

PUR(Cno, Pno, Sno)

全码

参照关系

被参照关系

Page 8: 第 二 章 关系数据库

2.1 2.1 关系数据库的基本概念关系数据库的基本概念 ( 5 )关系的性质 ① 每列的值为同一类型。 ② 每列具有不同的属性名 ( 可同域 ) ③ 任意两元组不能完全相同。 ④ 行的次序可以互换。 ⑤ 列的次序可以互换。 ⑥ 分量值是原子的。 9801 黄林 19

9802 李红 209803 张英 21…… …… ….9830 王刚 20

+5

学号 姓名 年龄

、网虫不允许

元组

分量值属性名

关系的类型 : 基本关系(基表) 查询表 视图表

Page 9: 第 二 章 关系数据库

2.1 2.1 关系数据库的基本概念关系数据库的基本概念

2 、关系模式与关系数据库 定义 2.4 : 关系的描述称关系模式,其表示为: R(U, D ,Dom, F)

关系模式可简记为关系的属性名表。 R(U)=R(A1 , A2, A3,… .An) 例:学生(学号,姓名,总成绩)

域名集

属性名集

属性间的依赖关系集

属性向域的映像集

关系模式就是关系的框架(表框架) 它是对关系结构的描述

Page 10: 第 二 章 关系数据库

在关系模型中,实体以及实体间的联系都是用关系来表示。在一个给定的现实世界领域中,相应于所有实体及实体之间的联系的关系的集合构成一个关系数据库。

关系数据库也有型和值之分。关系数据库的型也称为关系数据

库模式,是对关系数据库的描述,是关系模式的集合。关系数据库的值也称为关系数据库,是关系的集合。关系数据库模式与关系数据库通常统称为关系数据库。

关系数据库

2.1 2.1 关系数据库的基本概念关系数据库的基本概念

Page 11: 第 二 章 关系数据库

2.2 2.2 关系模型及其描述关系模型及其描述1. 关系模型的特点及组成 关系模型的特点: 结构简单,表达力强 语言的一体化 非过程化的操作 坚实的数学基础 操作效率较低 关系模型的组成: 关系数据结构 关系数据操作 关系完整性约束

2. 关系模型的数据操作

(1) 数据查询

(2) 数据插入

(3) 数据删除

(4) 数据修改

Page 12: 第 二 章 关系数据库

3. 关系的完整性 三类完整性约束:

实体完整性 参照完整性 用户定义的完整性

说明: ① 实体完整性规则是对基本关

系的约束和限定。 ② 实体具有唯一性标识—主码。 ③ 主码属性不能取空值。

2.2 2.2 关系模型及其描述关系模型及其描述

(1) 实体完整性 规则 2.1 实体完整性规则 : 若属性 A 是基本关系 R 的主

码属性,则属性 A 不能取空值。

不变性由关系系统自动支持

是应用领域需要遵循的约束条件

数据完整性控制过程?

Page 13: 第 二 章 关系数据库

2.2 2.2 关系模型及其描述关系模型及其描述

(2) 参照完整性 引用关系: 关系中的某属性的值需要参照另一关系的属性来取值。 例 1 :学生 ( 学号,姓名,性别,专业号,年龄 )

专业 ( 专业号,专业名 )

例 2: 学生 ( 学号,姓名,性别,专业号,年龄,班长 )

引用

引用

Page 14: 第 二 章 关系数据库

2.2 2.2 关系模型及其描述关系模型及其描述

定义 2.5 : 设:基本关系 R 、 S( 可为同一关系 ) 。 若 F 是 R 的一个 ( 组 ) 属性,但不是 R 的码。 如果 F 与 S 的主码 K 相对应,则称 F 是 R 的外码。 并称 R 为参照关系, S 为被参照关系(目标关系)。 说明: S 的主码 K 和 R 的外码 F 必须定义在同一个 ( 或一组 ) 域上。

例 1 :学生 ( 学号,姓名,性别,专业号,年龄 )

专业 ( 专业号,专业名 )

引用被参照关系

参照关系

外码

参照完整性规则定义了外码与主码之间的引用规则。

Page 15: 第 二 章 关系数据库

2.2 2.2 关系模型及其描述关系模型及其描述 规则 2.2 参照完整性规则 若属性 ( 组 ) F是 R 的外码它与 S 的主码 K 相对应,则对于 R

中每个元组在 F 上的值必须为: 或者取空值 (F 的每个属性值均为空值 ) ; 或者等于 S 中某个元组的主码值。

例 1 :学生 ( 学号,姓名,性别,专业号,年龄 ) 关系中每个元组的专业号取值: ① 空值 ( 未给该学生分配专业 ) ; ② 非空值 ( 是专业关系中某个元组的专业号值 ) 。

Page 16: 第 二 章 关系数据库

2.2 2.2 关系模型及其描述关系模型及其描述

例 2 :职工 EMP(EMP#,ENAME,JOB,DEPT#)

部门DEPT(DEPT#,DNAME,LOC)

则: EMP 中的 DEPT# 为空或为 DEPT 中的 DEPT# 的值 (3) 用户定义的完整性

用户自定义完整性是针对某一具体数据的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求,由应用环境决定。

例: 属性的取值范围 属性的非空限制

Page 17: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 关系数据语言的分类 ( 1 )关系代数语言 用对关系的运算来表达查询要求方式的语言。( 2 )关系演算语言 用谓词来表达查询要求方式的语言。 ①元组关系演算语言

②域关系演算语言 ( 3 )结构化查询语言 ( SQL)

Page 18: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数关系代数

具有关系代数和关系演算双重特点

关系演算:元组演算、域演算

域演算

关系数据库标准语言 SQL

用关系运算来表达查询,以 ISBL 为代表

用谓词公式来表达查询元组演算 ( 以行为变量 ) ,以ALPHA 为代表

域演算 ( 以列为变量 ) ,以 QBE 为代表

元组演算

Page 19: 第 二 章 关系数据库

关系查询语言关系查询语言关系代数语言:查询操作是以集合操作作为基础的语言

关系演算语言:查询操作是以谓词演算作为基础的语言

关系查询语言是一种比 Pascal、 C等程序设计语言更高级的语言。 Pascal、 C 、关系代数语言属于过程性语言,在编程时必须给出获得结果的操作步骤。 而关系演算语言属于非过程性语言,编程时只需要指出需要什么信息,不必给出具体的操作步骤。

干什么?怎么干?

干什么?

2.3 2.3 关系代数关系代数

Page 20: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数

1. 集合运算 关系代数是一种抽象的查询语言。它以关系为运算对象, 通过对关系进行“组合”或“分割”,得到所需的数据集合—

关系。 分类: 集合运算(并、交、差;广义笛卡尔积) 关系运算 (投影、选择、连接和除运算)

设: t 为元组变量; R 、 S 为同类关系 ( 同元、相应属性同域);

下列运算结果为同类关系: (1)并运算 : RUS ={t |( t∈R )∨( t ∈ S) }

(2)差运算 : R-S={t |( t∈R )∧( t S) } (3)交运算 : R∩S={t |( t∈R )∧( t ∈ S) }

RS

Page 21: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数

R1 - R

2

A1

A2

A3

b 3 b

d 3 b

R2

A1 A2 A3 a 3 c

b 2 d c 2 d

e 5 f

g 6 f

R1

A1 A2 A3 b 2 d

b 3 b

c 2 d

d 3 b

关系运算示例

R 1 ∩R

2

A1

A2

A3

b 2 d

c 2 d

R1

∪R2

A1

A2

A3

b 2 d

b 3 b

c 2 d

d 3 b

a 3 c

e 5 f

g 6 f

Page 22: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 (4)广义笛卡尔积 : R 、 S 可为不同类关系,则结果为不同类关系: R×S={tr ts| ( tr∈R )∧( ts ∈ S) }

连接为 m+n 目关系 m 目关系

n 目关系

S

A2

A3

2 d

3 b

R

A1 A2 A3 b 2 d

b 3 b

c 2 d

d 3 b

Page 23: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数

元组的前 n 列是关系 R 的一个元组 后m 列是关系 S 的一个元组

R × S

R . A1 R . A2 R .A3 S . A2 S . A3

b 2 d 2 d

b 2 d 3 b

b 3 b 2 d

b 3 b 3 b

c 2 d 2 d

c 2 d 3 b

d 3 b 2 d

d 3 b 3 b

Page 24: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 记号 设 t为 R 的元组变量,设: R ( A1,

A2,… An) = R(U) t[Ai] (Ai 为属性 ) : R 在属性集 Ai

上的所有值。 t[A] (A 为属性集 ) , R 在属性集 A

上的所有值。

例: t[ 学号 ]--R 中学号上的值 t [ 学号,姓名 ]

9801 黄林 199802 李红 209803 张英 21…… …… ….9830 王刚 20

学号 姓名 年龄

t

Page 25: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 2.专门的关系运算 ( 1 )选择 是行上的选择,产生同类关系。

σ F(R)={t|(t∈R)∧F( t )=true}}

含义:由 R 中满足 F 条件的元组组成。 其中: F 由属性名(值)、比较符、逻辑运算符组成。

例: σ A2>5 ∨A3 ≠“f”(R)

或: 选择运算是从行的角度进行的运算

R

A1 A2 A3 a 3 f b 2 d c 2 d

e 6 f

g 6 f

σ[2]>5∨ [3]≠“f” (R)

A1 A2 A3 b 2 d c 2 d e 6 f g 6 f

√√

√√

σ [2]>5 ∨ [3]≠“f” (R)

σ

Page 26: 第 二 章 关系数据库

2.3 2.3 关系代关系代数数

( 2 )投影运算 是列上的选择,产生不同类关系。

ΠA(R)={t[A] |(t∈R) } 含义: R 中取属性名表 A 中指定 的列,消除重复元组。

例: ΠA3, A2(R)

A3

A2 f 3 d 2

f 6

3, 2Π

A A (R)

R

A1 A2 A3 a 3 f b 2 d c 2 d

e 6 f

g 6 f

Page 27: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 投影操作主要是从列的角度进行运算

π

用关系代数表示查询: 例:查选 2 号课程的学生记录。

例 : 成绩在 90 分以上的学生号。

9801 1 959801 2 909802 1 8898022 3 929803 2

Sno Cno Grade

80……

SC表

解: σCno=‘2’(SC)

解 : ΠSno(σGrade≥90(SC))

Page 28: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 ( 3 )连接运算: ① 一般连接 它从两个关系的笛卡尔积中选取属性间满足一定条件的元组。 R ⋈ S={tr ts|(tr∈R)∧(ts∈S)∧tr[A] θ ts[B]} A θ B

比较运算符① ②

含义: 从 R X S 中选取 R 关系在 A 属性组上的值与 S 关系在 B 属性组

上值满足 θ 关系的元组。

Page 29: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 ② 等值连接: θ 为“=” 的连接。

什么是等值连接 θ 为“=”的连接运算称为等值连接

等值连接的含义 从关系 R 与 S 的广义笛卡尔积中选取 A 、 B 属性值相等的那些元组,即等值连接为:

R S = { | tr R∧ts S∧tr[A] = ts[B] } A=Btr ts

AθB

R

S

p73 例

Page 30: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 ③ 自然连接 设 R 、 S 有同名属性 Bi ( i=1,2….k)

R ∞ S= {tr ts|(tr∈R)∧(ts∈S)∧tr[B] = ts[B]}

p74 例

其中 B是 R和 S 的公共属性,并且在形成的新关系中要去掉重复的属性。

Page 31: 第 二 章 关系数据库

2.3 关系代数——连接举例

A B C

a1 b1 5

a1 b2 6

a2 b3 8

a2 b4 12

B E

b1 3

b2 7

b3 10

b3 2

b5 2

R S

Page 32: 第 二 章 关系数据库

2.3 关系代数——连接举例

R S

A R.B C S.B E

a1 b1 5 b2 7

a1 b1 5 b3 10

a1 b2 6 b2 7

a1 b2 6 b3 10

a2 b3 8 b3 10

C< E

Page 33: 第 二 章 关系数据库

2.3 关系代数——连接举例

等值连接 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

Page 34: 第 二 章 关系数据库

2.3 关系代数——连接举例

自然连接 R S

A B C E

a1 b1 5 3

a1 b2 6 7

a2 b3 8 10

a2 b3 8 2

Page 35: 第 二 章 关系数据库

2.3 关系代数——连接举例

等值连接与自然连接的区别: ( 1 )自然连接一定是等值连接,但等值连接不一定

是自然连接。因为自然连接要求相等的分量必须是公共属性,而等值连接相等的分量不一定是公共属性。

( 2 )等值连接不把重复的属性去掉,而自然连接要把重复属性去掉。

注意

若 R 、 S 无公共属性, R S=?

Page 36: 第 二 章 关系数据库

2.3 关系代数

象集( Image Set ) 关系 R(X , Z), X, Z 是属性组, x 是 X 上的取值,定义 x在 R 中的象集为

ZZxx={t[Z]|t={t[Z]|tRRt[X]=x}t[X]=x}

从 R 中选出在 X 上取值为 x 的元组,去掉 X 上的分量,只留 Z 上的分量

X Z张军同学所选修的全部课程x= 张军

Zx

姓名 课程张军 物理王红 数学张军 数学

课程

数学

物理

( 4 )除运算

Page 37: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数

做法:逐个考虑选课关系 SC 中的元组 r ,求 r 在姓名 SN 上的分量 x ,再求 x 在选课关系中的象集课程 Cx ,若 Cx 包含了所有的课程 C ,则 x 是满足条件的一个元组

{ x | x=r[SN] rSC CxC }

选修全部课程的学生

全部课程x 同学所选修的全部课程

除 定 义 R(X,Y) S(Y) = {tr[x] |

trRY(S)Yx}

其中 Yx 为 x 在 R 中的象集 ,x=tr[x]

除运算除运算 如何得到选修了全部课程的学生?

Page 38: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数

物理数学课程

=物理王红数学张军数学王红物理张军课程姓名

王红张军姓名

没有选修全部课

程的学生

所有学生选修

全部课程

=数学张军数学王红物理张军课程姓名

物理王红数学张军数学王红物理张军课程姓名

姓名王红

姓名王红张军

姓名王红

= 姓名张军

选修了全部课

程的学生

Page 39: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数

示例 求同时选修了 001和 002 号课程的学生号 方案 1 :

∏ S#, C#(SC) C# = 001 C# = 002 (C)

方案 2 :∏ S#(SC C# = 001 C# = 002 (C))

哪一个正确?

Page 40: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数

A B C D

a b c d

a b e f

a b d e

b c e f

e d c d

e d e f

C D

c d

e f

A B

a b

e d

A B

a b

b c

e d

A B C D

a b c d

a b e f

b c c d

b c e f

e d c d

e d e f

R AB (R)S AB (R) CD (S)

AB (R) CD (S)-R

A B C D

b c c d

R S=

A B

a b

b c

e d

A B

b c- =

Page 41: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 (( 综合举综合举例)例)

学生 - 课程数据库 : S(sno, sname, sex, age, dept)

C(cno, cname , credit , pcno)

SC(sno, cno, grade)

目标 A

条件 F

来源 R

Page 42: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 (( 综合举例)综合举例)

学 号Sno

姓 名Sname

性 别sex

年 龄age

所 在 系dept

95001 李勇 男 20 CS

95002 刘晨 女 19 IS

95003 王敏 女 18 MA

95004 张立 男 19 IS

Student

Page 43: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 (( 综合举例)综合举例)Course

课程号 课程名 先行课 学分Cno Cname pcno credit

1 数据库 5 4

2 数学   2

3 信息系统 1 4

4 操作系统 6 3

5 数据结构 7 4

6 数据处理   2

7 PASCAL 语言 6 4

Page 44: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 (( 综合举例)综合举例)

SC

学 号 课 程 号 成 绩

Sno Cno Grade

95001 1 92

95001 2 85

95001 3 88

95002 2 90

95002 3 80

Page 45: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 (( 综合举例)综合举例) 例 1 :查不选 002 号课程的学生姓名与年龄。

Cno≠’002’?

Πsname,age(S)- Πsname,age(S ∞σcno=‘002’

(SC)) 例 2 :查询至少选修了两门课程的学生学号。

Πsno(σ[1]=[4]∧[2]≠[5](SC×SC))

Page 46: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 (( 综合举例)综合举例)

① ② 目标A1、 A2

例 3 :查所选课程包含了学生 210101 所选全部课程的学生号和姓名。

(Πsno , cno(SC) ÷ Πcno (σsno=210101 (SC)))Πsno,sname( S) ∞

例 4 :查询选修了全部课程的学生学号与姓名。Πsno,sname( S) ∞

(Πsno , cno(SC) ÷ Πcno ( (C)))

Page 47: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 (( 综合举例)综合举例)[ 例 5] 查询信息系( IS 系)全体学生 σdept = 'IS' (Student)

或 σ5 ='IS' (Student)

结果:

Sno Sname sex age dept

95002 刘晨 女 19 IS

95004 张立 男 19 IS

Page 48: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 (( 综合举例)综合举例)

[ 例 6] 查询年龄小于 20 岁的学生 σage < 20(Student)

或 σ4 < 20(Student)

结果: Sno Sname sex age dept

95002 刘晨 女 19 IS

95003 王敏 女 18 MA

95004 张立 男 19 IS

 

Page 49: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 (( 综合举例)综合举例)

[ 例 7] 查询学生的姓名和所在系即求 Student 关系上学生姓名和所在系

两个属性上的投影 πSname, dept(Student)

或 π2, 5(Student)

结果:

Sname dept

李勇 CS

刘晨 IS

王敏 MA

张立 IS

Page 50: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 (( 综合举例)综合举例)

以学生 - 课程数据库为例 (P.59)

[ 例 8] 查询至少选修 1 号课程和 3 号课程的学生号码

首先建立一个临时关系 K :

然后求: πSno.Cno(SC)÷K

Cno

1

3

Page 51: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 (( 综合举例)综合举例)

例 8 续 π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

Page 52: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 (( 综合举例)综合举例) [ 例 9] 查询选修了 2 号课程的学生的学号。

πSno( σCno='2'( SC ))={ 95001, 95002 }

[例 10] 查询选修了全部课程的学生号码和姓名。

πSno , Cno( SC)÷πCno( Course ) πSno , Sname( Student )

Page 53: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 (( 综合举例)综合举例)

[ 例 11] 查询至少选修了一门其直接先行课为 5 号课程的课程的学生姓名。

πSname(σCpno='5'(Course SC Student))或

πSname(σCpno='5'(Course) SC πSno , Sname(Student))

πSname (πSno (σCpno='5' (Course) SC)

πSno , Sname (Student)) 

Page 54: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 (( 小结)小结) 关系代数五种基本运算: 并、差、笛卡尔积、投影、选择 非基本运算用基本运算的表示 1. 交 R∩S=R-(R-S) 2. 连接 R ⋈ S =σ[i]θ[m+j](R×S) (设 R 为m 元、 S 为 n 元

关系 ) iθj

R ⋈ S = Πi1,i2,…im(σR.A1=S.A1…R.Ak=S.Ak(R×S)) 其中: A1, A2,…, Ak为 R 、 S 的公共属性。 i1, i2,… im 为从 R 与 S 的属性集中去掉 S.A1,S.A2,… S.Ak后剩余的属性。

Page 55: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 3. 除 设关系 R(X,Y), S(Y,Z), X 、 Y 、 Z 为属性集R÷S 的计算过程如下:① T = ΠX(R)

② W = (T× ΠY(S)) - R (计算 T×S 中不在 R 的元组 )

③ V = ΠX(W)

④ R÷S = T – V即R÷S ≡ ΠX(R)- ΠX((ΠX(R)× ΠY(S))–R)

P75 例

Page 56: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 5 种基本运算的作用 1 .关系的属性指定 ΠA1 , A2 , …, An (R) 2 .关系的元组选择 σF (R) 3 .两个关系的归并 R1×R2 4 .关系中元组的插入 R∪R ' 5 .关系中元组的删除 R - R'

Page 57: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数3.扩充的关系运算 ( 1 )广义投影 ΠF1,…Fn(R) ,其中, F1,…Fn 是涉及 R 中常量和属性的算术表

达式。例:

Πsno,sname,sex,age=20(σsno=‘200101’(Student)) ( 2 )赋值 R<- S: 将关系 S 赋予 R 。例: Course<- Course∪{099 ,电子商务, 2, 003}

(并) Student<-Student-(σsno=‘200108’(Student)) (删除)

Page 58: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数(3) 外连接

为避免自然连接时因失配而发生的信息丢失,可以假定往参与连接的一方表中附加一个取值全为空值的行,它和参与连接的另一方表中的任何一个未匹配上的元组都能匹配,称之为外连接

外连接 = 自然连接 + 失配的元组 外连接的形式:左外连接、右外连接、全外连接

左外连接 = 自然连接 + 左侧表中失配的元组右外连接 = 自然连接 + 右侧表中失配的元组全外连接 = 自然连接 + 两侧表中失配的元组

Page 59: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数 ( 4 )半连接 R 和 S 的自然连接只在关系 R 或关系 S 的属性集上的投影,称为半连接。R 和 S 的右外连接记为 R ⋉ S 。R 和 S 的半连接记为 S ⋊ R 。

( 5 )聚集

根据关系中的一组值经统计、计算得到一个值作为结果。

常用聚集函数: max、min、 avg、 sum、 count 。

形式: G 聚集函数名 ( 属性 )( 关系 )

Page 60: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数例:求男同学的平均年龄。 G avg(age)(σsex=‘男’ (Student)) 例:计算年龄不小于 20岁的同学人数。 G count(sno)(σage≥20(Student))

例:数据库课程的平均分数。 G avg(grade)(Πcno(σcname=‘ 数据库’ (Course)) ⋈SC) ( 6 )外部并 由 R和 S 中的所有属性组成 (公共属性只取一次 ) ,其

元组由属于 R 或属于 S 的元组组成,且元组在新增加的属性填上空值。

Page 61: 第 二 章 关系数据库

2.3 2.3 关系代数关系代数( 7 )重命名 ① ρx(E) :其含义为给一个关系表达式赋予名字,返回表达式 E 的结果,并把名字 x 赋给 E 。

②ρx( A1, A2,……, An)(E): 其含义为返回表达式 E 的结果,并把名字 x 赋给 E ,同时将各属性更名为 A1, A2,……, An 。

例:设关系 R( 姓名,课程,成绩),求数学成绩比王红同学高的学生。

∏ S.姓名 (( 课程 = 数学姓名 = 王红 (R)) ⋈ ( 课程 = 数学

S(R))) R. 成绩 <S.成绩

Page 62: 第 二 章 关系数据库

2.4 2.4 关系演算关系演算 关系演算:以谓词演算为基础表示的关系运算。 关系演算分类

元组关系演算 域关系演算

1. 元组关系演算 用 {t|ф(t)} 表示关系。

命题公式 元组变量

表示所有使得ф 为真的元组组成的集合。

Page 63: 第 二 章 关系数据库

2.4 2.4 关系演算关系演算 -- 元组演算元组演算( 1 )元组关系演算中的原子公式 ① R(t) t— 元组变量 R— 关系名

R(t) 表示: t 是关系 R 的一个元组。 关系 R 可表示为: {t|R(t)} ② t[i]θC 或 Cθt[i] C— 常量 表示:元组 t 的第 i个分量与常量 C 之间满足θ 关系。 ③ t[i]θu[j] 其中: t, u–元组变量 θ–算术比较符 t[i]–t 的第 i个分量 u[j]–u 的第 j个分量 t[i]θu[j] 表示:元组 t 的第 i个分量与元组 u 的第 j个分量之间满足θ 关系。

Page 64: 第 二 章 关系数据库

2.4 2.4 关系演算关系演算 -- 元组演算元组演算 ( 2 ) 公式的递归定义 ① 每个原子公式是公式。 ② 若ф1 和ф2 是公式,则

ф1 、ф1∨ф2、ф1∧ф2、ф1-> ф2 也是公式。 ③ 若ф 是公式,则 (t)(ф)、 (t)(ф) 也是公式。 ④ 有限次使用上述 3 条规则得到的公式都是元组关系演算表达式。

公式中各种运算符的优先级: 算术运算符、量词 () 、逻辑运算符 ( ∧∨->)

高 低括号优先

Page 65: 第 二 章 关系数据库

关系演算表达式 关系代数表达式

● ● 用关系演算表达式表达五种基本运算:

R S={ t | R(t) S(t) }∪ ∨ R- S={ t | R(t) S(t) }∧ ┓

R×S ={ t(n+m) | ( u(n) ) ( v(m) ) ( R(u) S(v) ∧ ∧ t[1]=u[1] … t[n]=u[n] ∧ ∧ ∧ t[n+1]=v[1] … t[n+m]=v[m] ) }∧ ∧

σF (R) ={ t | R (t) F }∧

πi1, i2, … , ik (R) ={ t(k) | ( u) (R(u) t[1]=u[i1] … t[k]=u[ik] )}∧ ∧ ∧

2.4 2.4 关系演算关系演算 <-><-> 关系代数关系代数

Page 66: 第 二 章 关系数据库

关系演算表达式 关系代数表达式

例 1 查询信息系( IS )全体学生

σF (R) ={ t | R (t) F }∧

SIS={ t | Student(t) t[5]=‘IS’ }∧

例 2 查询年龄小于 20岁的学生S20={ t | Student(t) t[4]∧ < 20 }

2.4 2.4 关系演算关系演算 <-><-> 关系代数关系代数

Page 67: 第 二 章 关系数据库

关系演算表达式 关系代数表达式

例 3 查询学生的姓名和所在系

S1={ t(2) | ( u) ( Student(u) t[1]=u[2] t[2]=u[5]∧ ∧ ) }

πi1, i2, … , ik (R) ={ t(k) | ( u) (R(u) t[1]=u[i1] … t[k]=u[ik] )}∧ ∧ ∧

2.4 2.4 关系演算关系演算 <-><-> 关系代数关系代数

Page 68: 第 二 章 关系数据库

2.4 2.4 关系演算关系演算 -- 元组演算元组演算 例 1 :设有关系 R 和 S ,请写出下列元组演算表达式的结果。

A B C

1 2 3

4 5 6

7 8 9

A B C

1 2 3

3 4 6

5 6 9

R S

R1={t|S(t)∧t[1]>2}

R2={t|R(t)∧ S(t)}

R3={t|(u)(S(t)∧R(u)∧t[3]<u[2])}

R4={t|(u)(R(t)∧S(u)∧t[3]>u[1])}

Page 69: 第 二 章 关系数据库

2.4 2.4 关系演算关系演算 -- 元组演算元组演算R5={t|(u)(v)(R(u)∧S(v)∧u[1]>v[2]∧t[1]=u[2]

∧t[2]=v[3]∧t[3]=u[1])}

例 2 :设 R 和 S 都是二元关系,将∏ 1,4(σ[2]=[3](R×S))转换成元组演算表达式。

{t|(u)(v)(R(u)∧S(v)∧u[2]=v[1]∧t[1]=u[1]∧t[2]=v[2])}

Page 70: 第 二 章 关系数据库

2.4 2.4 关系演算关系演算 -- 元组演算元组演算

A B C

3 4 6

9 6 9

A B C

4 5 6

7 8 9

A B C

1 2 3

3 4 6

A B C

4 5 6

7 8 9

R1 R2

R3 R4

Page 71: 第 二 章 关系数据库

2.4 2.4 关系演算关系演算 -- 元组演算元组演算

R5: t[1]=u[2] ∧ t[2]=v[3] ∧ t[3]=u[1])

u[1]

v[2]

1 * 2

4 4

7 6

u[1]

u[2]

u[3]

v[1]

v[2]

v[3]

4 5 6 1 2 3

7 8 9 1 2 3

7 8 9 3 4 6

7 8 9 5 6 9

R5:

Page 72: 第 二 章 关系数据库

2.4 2.4 关系演算关系演算 -- 域演算域演算2. 域关系演算以域变量作为谓词变元的基本对象。 用 {t1,t2,…,tk|ф(t1,t2,…,tk)} 表示关系。 t1,t2,…,tk 是元组变量 t 的各个域分量。 ( 1 )域演算中的原子公式 ① R ( t1,t2,…,tk) 表示:由分量 t1,t2,…,tk 组成的元组属于 R 。 ② tiθuj 表示:元组变量 t 的第 i个分量与元组 u 的第 j个分量间满足θ 关系。

③ tiθC 或 Cθti 表示:元组变量 t 的第 i个分量与常量 C 间满足θ 关系。 ( 2 )公式的递归定义 与元组演算定义类似。

Page 73: 第 二 章 关系数据库

2.4 2.4 关系演算关系演算 -- 域演算域演算 例:设有关系 R 、 S 、W ,试写出下列域演算表达

式的结果。

A B C

1 2 3

4 5 6

7 8 9

A B C

1 2 3

3 4 6

5 6 9

D E

7

5

4

8

R WS

R1={xyz|R(xyz)∧x<5∧y>3}

R2={xyz|R(xyz)∨S(xyz)∧y=8}

R3={xyz|(u)(v)(R(zxu)∧w(yv)∧u>v)}

Page 74: 第 二 章 关系数据库

2.4 2.4 关系演算关系演算 -- 域演算域演算 R1: R2:

A B C

4 5 6

A B C

1 2 3

4 5 6

7 8 9

u=R.c

3*

6

9

v=W.E

5

8

R3: xyzz x u y v

4 5 6 7 5

7 8 9 7 5

7 8 9 4 8

Page 75: 第 二 章 关系数据库

2.4 2.4 关系演算关系演算

安全运算 不产生无限关系和无穷验证的运算。 安全表达式 安全运算的表达式。 安全限制 安全运算所采取的措施。

注意

关系代数运算总是安全的。关系演算则可能出现无限关系和无穷验证问题,

3. 关系演算的安全性

例: {t|R(t)}

这是一个无限关系。

要使关系演算是安全的,只要定义一个安全约束有限集合,该有限集是表达式中涉及到的关系中的值的集合。经过安全限制后的表达式其运算是安全的。关系代数和关系演算所依据的基础理论是相同的,故可进行相互转换。已证明,关系代数、安全的元组演算、安全的域演算在关系的表达能力上是等价的。

Page 76: 第 二 章 关系数据库

2.4 2.4 域关系演算语言域关系演算语言 QBEQBE

一种典型的域关系演算语言 由M.M.Zloof 提出 1978 年在 IBM370 上得以实现 QBE 也指此关系数据库管理系统

QBE: Query By Example 基于屏幕表格的查询语言 查询要求:以填写表格的方式构造查询 用示例元素 ( 域变量 ) 来表示查询结果可能的情况 查询结果:以表格形式显示

Page 77: 第 二 章 关系数据库

QBEQBE 操作框架操作框架

关系名 属性名

操作命令 元组属性值或查询条件或操作命令

Page 78: 第 二 章 关系数据库

QBEQBE 操作框架操作框架————检索操作检索操作

( 1 )用户提出要求;( 2 )屏幕显示空白表格; ( 3 )用户在最左边一栏输入要查询的关系名,例如

Student ;

Student

Page 79: 第 二 章 关系数据库

QBEQBE 操作框架操作框架————检索操作检索操作( 4 )系统显示该关系的属性名

( 5 )用户在上面构造查询要求

 

Student Sno Sname Ssex Sage Sdept

    P. T   AO. C

 

Student Sno Sname Ssex Sage Sdept

     

Page 80: 第 二 章 关系数据库

QBEQBE 操作框架操作框架————检索操作检索操作( 6 )屏幕显示查询结果

Student Sno Sname Ssex Sage Sdept

    李勇张立

    C

 

Page 81: 第 二 章 关系数据库

QBEQBE 操作框架操作框架————构造查询的几个要构造查询的几个要素素

示例元素 即域变量 一定要加下划线 示例元素是这个域中可能的一个值,它不必是查询结

果中的元素 打印操作符 P. 指定查询结果所含属性列 查询条件 不用加下划线 可使用比较运算符>,≥,<,≤,=和≠ 其中=可以省略 排序要求

Page 82: 第 二 章 关系数据库

QBEQBE 简单查询简单查询

[例 1] 查询全体学生的全部数据。

Student Sno Sname Ssex Sage Sdept

  P.95001

P. 李勇

P.男

P.20 P.CS

Page 83: 第 二 章 关系数据库

QBEQBE 简单查询简单查询 显示全部数据也可以简单地把 P. 操作符作用在关系名上。

Student Sno Sname Ssex Sage Sdept

  P.   

Page 84: 第 二 章 关系数据库

QBEQBE条件查询条件查询(1) 简单条件

[例 2] 求信息系全体学生的姓名。

Student Sno Sname Ssex Sage Sdept

    P. 李勇   IS

Page 85: 第 二 章 关系数据库

QBEQBE条件查询(续)条件查询(续) [例 3] 求年龄大于 19 岁的学生的学号。

Student Sno Sname Ssex Sage Sdept

  P.95001

    >19

Page 86: 第 二 章 关系数据库

QBEQBE条件查询(与条件)条件查询(与条件)[例 4] 求计算机科学系年龄大于 19 岁的学生的学号。

方法( 1 ):把两个条件写在同一行上

Student Sno Sname Ssex Sage Sdept

  P.95001

    >19 CS

Page 87: 第 二 章 关系数据库

QBEQBE条件查询(续)条件查询(续) 方法( 2 ):把两个条件写在不同行上,但使 用相同的示例元素值

Student Sno Sname Ssex Sage Sdept

  P.95001P.95001

     >19

CS

Page 88: 第 二 章 关系数据库

QBEQBE条件查询(续)条件查询(续)

[ 例 5] 查询既选修了 1 号课程又选修了 2 号课程的学生的学号。

SC Sno Cno Grade  P.95001

P.9500112

 

Page 89: 第 二 章 关系数据库

QBEQBE条件查询(续)条件查询(续)

[例 6] 查询计算机科学系或者年龄大于 19 岁的学生的学号。

Student Sno Sname Ssex Sage Sdept

  P.95001P.95002

     >19

CS

Page 90: 第 二 章 关系数据库

QBEQBE 多表连接多表连接[例7] 查询选修1 号课程的学生姓名。

SC Sno Cno Grade  95001 1  

Student Sno Sname Ssex Sage Sdept  95001 P. 李

勇     

注意:示例元素 Sno 是连接属性,其值在两个表中要相同。

Page 91: 第 二 章 关系数据库

QBEQBE条件查询(非条件)条件查询(非条件)[例 8] 查询未选修 1 号课程的学生姓名

思路:显示学号为 95001 的学生名字,而该学生选修 1 号课程的情况为假

SC Sno Cno Grade  95001 1  

Student Sno Sname Ssex Sage Sdept  95001 P. 李

勇     

Page 92: 第 二 章 关系数据库

QBEQBE条件查询(续)条件查询(续)[例 9] 查询有两个人以上选修的课程号

思路:查询这样的课程 1 ,它不仅被 95001 选修 而且也被另一个学生( 95001 )选修了

SC Sno Cno Grade  95001

.95001P.11

 

Page 93: 第 二 章 关系数据库

QBE—QBE— 集函数集函数常用集函数:

函 数 名 功 能

CNT 对元组计数

SUM 求 总 和

AVG 求平均值

MAX 求最大值

MIN 求最小值

Page 94: 第 二 章 关系数据库

QBE—QBE— 集函数集函数[例 10] 查询信息系学生的平均年龄。

Student Sno Sname Ssex Sage Sdept

        P.AVG.ALL. IS

Page 95: 第 二 章 关系数据库

QBEQBE 查询结果排序查询结果排序(续)(续)[ 例 11] 查全体男生的姓名,要求查询结果按所在系升序排序,对相同系的学生按年龄降序排序。

Student Sno Sname Ssex Sage Sdept

    P. 李勇

男 DO( 2) .

AO( 1) .

Page 96: 第 二 章 关系数据库

QBEQBE 修改操作修改操作

[例 12] 把 95001 学生的年龄改为 18 岁。

方法 (1) :将操作符“ U.”放在值上

Student Sno Sname Ssex Sage

Sdept

95001

    U. 18  

Page 97: 第 二 章 关系数据库

QBEQBE 修改操作修改操作 (( 续续 ))

方法 (2) : 将操作符“ U.”放在关系上

码 95001标明要修改的元组。“ U.”标明所在的行是

修改后的新值。

由于主码是不能修改的,所以系统不会混淆要修改

的属性。

Student Sno Sname Ssex Sage

Sdept

U. 95001

    18  

Page 98: 第 二 章 关系数据库

QBEQBE 修改操作修改操作 (( 续续 ))

[例 13] 将计算机系所有学生的年龄都改为 18 岁

Student Sno Sname Ssex Sage Sdept

95008

    U.18  CS

Page 99: 第 二 章 关系数据库

QBEQBE 修改操作修改操作 (( 续续 ))

 [例 14] 把 95001 学生的年龄增加 1 岁

分两行分别表示改前和改后的示例元素

必须将操作符“ U.”放在关系上

Student Sno Sname Ssex Sage Sdept

 U.

95001

95001

    1717+

1

 

Page 100: 第 二 章 关系数据库

QBEQBE 修改操作修改操作 (( 续续 ))

[例 15] 将计算机系所有学生的年龄都增加 1 岁

Student Sno Sname Ssex Sage Sdept

 U.

95008

95008

    1818+

1

 CS

Page 101: 第 二 章 关系数据库

QBEQBE 插入操作插入操作[ 例 16] 把信息系女生 95701 ,姓名张三,年龄 17 岁存入数据

库中。

Student Sno Sname Ssex Sage

Sdept

I. 95701

张三 女 17 IS

Page 102: 第 二 章 关系数据库

QBE QBE 删除操作删除操作

[例 17] 删除学生 95089

为保证参照完整性,删除 95089 学生前,先删除 95089 学生选修的全部课程

Student Sno Sname Ssex Sage

Sdept

D. 95089

SC Sno Cno Grade

D. 95089