1
第 3章 关系模型 (1)
? 本章主要讲述,
? 关系模型的数据结构
? 关系的定义和性质
? 关系数据库的基本概念
? 关系运算
2
3.1 关系数据库的结构
3.1.1 关系模型
? 关系模型就是用 二维表格 结构来表示实体及实体之间
联系的模型 。 即关系模型是一些 表格的格式, 其中包
括关系名, 属性名, 关键字等 。
? 例如, 教学数据库中教师与课程的关系模型如图 3.1所
示 。
教师关系T
TNO
教师号
TN
姓名
SEX
性别
AGE
年龄
PROF
职称
SAL
工资
COMM
岗位津贴
DEPT
系别
3
课程关系 C 授课关系 SC
图 3.1 教师 —课程数据库的关系模型
? 从各个关系的框架中, 我们可以很容易看出哪两个关
系之间有 联系 。 例如:
? 教师关系和授课关系有公共的属性, 教师号,, 则表明这两
个关系有联系 。
? 而课程关系和授课关系有公共的属性, 课程号,, 则表明这
两个关系也有联系 。
CNO
课程号
CN
课程名
CT
课时
TNO
教师号
CNO
课程号
4
3.1.2 关系的定义
1,域 ( Domain)
? 域是一组具有相同数据类型的值的集合, 又称为 值域
( 用 D表示 ) 。 关系中用域表示属性的取值范围 。 例如
整数, 实数, 字符串的集合 。
域中所包含的值的个数称为域的 基数 ( 用 m表示 ) 。
例如:
D1={李力, 王平, 刘伟 } m1=3
D2={男, 女 } m2=2
D3={47,28,30} m3=3
? 其中, D1,D2,D3为域名, 分别表示教师关系中姓名, 性别,
年龄的集合 。
5
2,笛卡尔积 (Cartesian Product)
? 给定一组域 D1,D2,…, Dn( 它们可以包含相同的元素,
即可以完全不同, 也可以部分或全部相同 ) 。 D1,
D2,…, Dn的笛卡尔积为 D1× D2× …… × Dn={( d1,
d2,…, dn) |di∈ Di,i=1,2,…, n}。
由定义可以看出, 笛卡尔积也是一个集合 。
其中:
① 元素中的每一个 di叫做一个分量 (Component),来自相应的域
( di∈ Di)
② 每一个元素 ( d1,d2,d3,…, dn) 叫做一个 n元组 ( n-tuple),
简称 元组 ( Tuple) 。 但元组不是 di的集合, 元组的每个分量 ( di)
是按序排列的 。 如:
( 1,2,3) ≠( 2,3,1) ≠( 1,3,2) 。
6
③ 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
7
④ 笛卡尔积可用二维表的形式表示 。
例如, 上述的 6个元组可表示成表 3.2。
表 3.2 D1和 D2的笛卡尔积
? 由上例可以看出, 笛卡尔积实际是一个二维表, 表的框架由
域构成, 表的任意一行就是一个元组, 表中的每一列来自同
一域, 如第一个分量来自 D1,第二个分量来自 D2。
姓名 性别
李力 男
李力 女
王平 男
王平 女
刘伟 男
刘伟 女
8
3,关系 ( Relation)
? 笛卡尔积 D1× D2× … × Dn的任一子集称为定义在
域 D1,D2,… Dn上的 n元 关系 ( Relation), 可用
R( D1,D2…… Dn) 表示
? 如上例 D1× D2笛卡尔积的子集可以构成教师关系 T1,如
下表:
表 3.3 教师关系 T1
姓名 性别
李力 男
王平 女
刘伟 男
9
几点说明:
① R为关系名, n称为关系的目或度 ( Degree) 。
当 n=1时, 称为 单元 关系, 当 n=2时, 称为 二元 关系 。 … 当 n=n
时, 称为 n元 关系 。 如上例为二元关系, 关系名为 T1。
② 数学上关系是笛卡尔积的任意子集, 但在实际应用中
关系是笛卡尔积中所取的有意义的子集 。 例如在表 3.2中
选取一个子集构成如下关系, 显然不符合实际情况
姓名 性别
李力 男
李力 女
表 3.4 不符合实际意义的关系
10
? 尽管 关系 与 二维表格 是非常类似的, 但它们之间又有
重要的区别 。 关系具有如下特性:
1,关系中不允许出现相同的元组 。
2,关系中元组的顺序 ( 即行序 ) 是无关紧要的, 在一个关系中可
以任意交换两行的次序 。
3,关系中属性的顺序是无关紧要的, 即列的顺序可以任意交换 。
交换时, 应连同属性名一起交换, 否则将得到不同的关系 。
4,同一属性名下的各个属性值必须来自同一个域, 是同一类型的
数据 。
5,关系中各个属性必须有不同的名字, 不同的属性可来自同一个
域 。
3.1.3 关系的性质
11
例如, 有如下表中关系, 职业与兼职是两个不同的属性, 但它们
取自同一个域,职业= { 教师, 工人, 辅导员 } 。
姓名 职业 兼职
张强 教师 辅导员
王丽 工人 教师
刘宁 教师 辅导员
表 3.5 关系
12
6,关系中每一分量必须是不可分的数据项, 或者说所有属性值都
是原子的, 即是一个确定的值, 而不是值的集合 。 满足此条
件的关系称为 规范化关系, 否则称为 非规范化关系 。
例如, 在表 3.6中, 籍贯含有省, 市/县两项, 出现了, 表中
有表, 的现象, 则为非规范化关系, 而把籍贯分成省, 市/县两
列, 将其规范化, 如表 3.7所示 。
表 3.6 表 3.7
姓名 籍贯 姓名 省 市/县
省 市/县
张强 吉林 长春 张强 吉林 长春
王丽 山西 大同 王丽 山西 大同
13
1,候选键与关系键
2,主属性与非码属性
? 主属性,包含在主码中的的各属性称为主属性 。
? 非码属性,不包含在任何候选码中的属性称为非码属
性 。
在最简单的情况下, 一个候选码只包含一个属性, 如学生
关系中的, 学号,, 教师关系中的, 教师号, 。 在最极终端的情
况下, 所有属性的组合是关系的候选码, 这时称为 全码 ( all-
key) 。
3.1.4 关系的键
14
3,外部关系键
? 如果关系 R2的一个或一组属性 X不是 R2的主码, 而是
另一关系 R1的主码, 则该属性或属性组 X称为关系 R2
的 外部关系键 或 外码 ( Foreign key) 。 并称关系 R2为
参照关系, 关系 R1为 被参照关系 。
例如 学生 ( 学号, 姓名, 系名 ), 系 ( 系名, 地址,
系主任 ), 则属性, 系名, 为学生关系模式的外码,
称学生为 参照关系, 系为 被参照关系 。
15
3.2 关系代数
关系代数的运算对象是关系, 运算结果也是关
系, 关系代数用到的运算符主要包括四类:
? 集合运算符, ∪ ( 并 ), ∩( 交 ), -( 差 ), X( 广义笛
卡尔积 ) ;
? 专门的关系运算符, σ(选择 ),∏( 投影 ), ∞( 连接 ), *
( 自然连接 ), ÷ ( 除 ) ;
? 算术比较运算符, >( 大于 ), ≥( 大于等于 ), <( 小于 ),
≤( 小于等于 ), =( 等于 ), ≠( 不等于 ) ;
? 逻辑运算符, ∧ ( 与 ),∨ ( 或 ),┐( 非 )
16
关系代数的运算按运算对象的不同主要分为两类:
? 传统的集合运算:把关系看成元组的集合, 以元组作
为集合中元素来进行运算, 其运算是从关系的, 水平,
方向即 行 的角度进行的 。 包括并, 差, 交和笛卡尔积
等运算 。
? 专门的关系运算:不仅涉及 行 运算, 也涉及 列 运算,
这种运算是为数据库的应用而引进的特殊运算 。 包括
选取, 投影, 连接和除法等运算 。
同时, 根据运算对象的个数还可以分为:
? 一元运算:只对一个关系进行运算 。 例如:选取, 投
影, 命名运算 。
? 二元运算:对两个关系进行运算 。 例如:并, 差, 交
和笛卡尔积等运算
17
3.2.1 传统的集合运算
1,并 ( Union)
? 关系 R和关系 S的并由属于 R或属于 S的元组组成, 即 R和 S的所
有元组合并, 删去重复元组, 组成一个新关系, 其结果仍为 n
目关系 。 记作:
R∪ S={t|t∈ R∨ t∈ S}
? 对于关系数据库, 记录的插入和添加可通过并运算实现 。
2,差 ( Difference)
? 关系 R与关系 S的差由属于 R而不属于 S的所有元组组成, 即 R
中删去与 S中相同的元组, 组成一个新关系, 其结果仍为 n目
关系 。 记作:
R-S={t|t∈ R∧ ┐t∈ S}
? 通过差运算, 可实现关系数据库记录的删除 。
18
3,交 ( Intersection)
?关系 R与关系 S的交由既属于 R又属于 S的元组组成,
即 R与 S中相同的元组, 组成一个新关系, 其结果仍
为 n目关系 。 记作:
R∩S={t|t∈ R ∧ t∈ S}
?如果两个关系没有相同的元组, 那么它们的交为空 。
?两个关系的并和差运算为基本运算 ( 即不能用其他
运算表达的运算 ), 而交运算为非基本运算, 交运
算可以用差运算来表示:
R∩S=R-(R-S)
19
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}
?关系的广义笛卡尔积可用于两关系的连接操作 ( 连
接操作将在一节中介绍 ) 来实现 。
20
? 【 例 3.1】 如图 3.8(a),(b)所示的两个关系 R与 S为
相容关系, (c)为 R与 S 的并, (d)为 R与 S的交, (e)为
R与 S的差, (f)为 R与 S的广义笛卡尔积 。
R S
(a) (b)
A B C A B C
a1 b1 c1 a1 b1 c1
a1 b1 c2 a2 b2 c1
a2 b2 c1 a2 b3 c2
21
R∪ S R-S
(c) (d)
R∩S
( e)
A B C A B C
a1 B1 c1 a1 b1 c2
a1 B1 c2
a2 B2 c1
a2 B3 c2
A B C
a1 B1 c1
a2 B2 c1
22
R× S
A B C A B C
a1 b1 c1 a1 b1 c1
a1 b1 c1 a2 b2 c1
a1 b1 c1 a2 b3 c2
a1 b1 c2 a1 b1 c1
a1 b1 c2 a2 b2 c1
a1 b1 c2 a2 b3 c2
a2 b2 c1 a1 b1 c1
a2 b2 c1 a2 b2 c1
a2 b2 c1 a2 b3 c2
( f)
图 3.8 传统的集合运算
23
3.2.2 专门的关系运算
? 由于传统的集合运算, 只是从行的角度进行, 但是要
灵活地实现关系数据库多样的查询操作, 就必须引入
专门的关系运算 。
? 引入几个概念:
( 1) 设关系模式为 R(A1,A2,…… An),它的一个关
系为 R,t∈ R表示 t是 R的一个元组, t[Ai]则表示元
组 t中相应于属性 Ai的一个分量 。
24
( 2) R为 n目关系, S为 m目关系, tr∈ R,ts∈ S,trts称
为元组的连接, 它是一个 n+m列的元组, 前 n个分量
为 R的一个 n元组, 后 m个分量为 S中的一个 m元组 。
( 3)给定一个关系 R( X,Z),X和 Z为属性组,定
义当 t[X]=x时,x在 R中的象集为
Zx={t[Z]|t∈ R,t[X]=x},它表示 R中的属性组 X上值为 x
的诸元组在 Z上分量的集合。
25
1,选择 ( Selection)
? 选择运算是单目运算, 是根据一定的条件在给定的关
系 R中选取若干个元组, 组成一个新关系, 记作:
σF(R)={t|t∈ R∧ F(t)为真 }
? 其中, σ为选取运算符, F为选取的条件, 它由运算对
象 ( 属性名, 常数, 简单函数 ), 算术比较运算符
( >, ≥,<,≤,=,≠) 和逻辑运算符 ( ∨ ∧ ┐) 连
接起来的逻辑表达式, 结果为逻辑值, 真, 或, 假, 。
? 选取运算实际上是从关系 R中选取使逻辑表达式为真
的元组, 是从行的角度进行的运算 。
26
例 3.2 查询计算机系的全体学生 。
σdepartment_name=“计算机系, (student)或
σ3=’计算机系 ’ (student)( 其中 3为 department_name的属性
序号 )
? 结果教材 P53图 3.9所示 。
例 3.3 查询学号大于, s000004”的学生信息 。
σstudent_number>“s000004”(student)
例 3.4 查询计算机系的查询学号大于, s000004”的学生信
息 。
σdepartment_name=“计算机系, ∧ student_number>” s000004”(student)
27
2,投影 ( Projection)
? 投影运算也是单目运算, 关系 R上的投影是从 R中选择
出若干属性列, 组成新的关系, 即对关系在垂直方向
进行的运算, 从左到右按照指定的若干属性及顺序取
出相应列, 删去重复元组 。 记作:
ΠA(R)={t[A]|t∈ R}
? 其中 A为 R中的属性列, Π为投影运算符 。
? 从其定义可看出,投影运算是从列的角度进行的运算,
这正是选取运算和投影运算的区别所在。选取运算是
从关系的水平方向上进行运算的,而投影运算则是从
关系的垂直方向上进行的。
28
例 3.5 查询学生的学号及姓名 。
Πstudent_number,student_name(student)或
Π1,2(student)
? 结果如教材 P54图 3.10图所示。
例 3.6查询出计算机系的学生姓名 。
Πstudent_name (σdepartment_name=“计算机系, (student))
Student_
name
冯蔼妍
陈国国
29
? 由例 3.6 可以看出, 投影后取消了某些属性列后, 就可
能出现重复行, 应该取消这些完全相同的行 。 所以投
影之后, 不但减少了属性, 元组也可能减少 。
30
课堂练习 3.2:
? 下图给出了教学数据库的关系模型及其实例, 包含五
个关系:教师关系 T,学生关系 S,课程关系 C,选课
关系 SC和授课关系 TC,分别对应五张表,请完成以下
操作,
① 查询计算机系的全体学生 ;
② 查询工资高于 1000元的男教师 ;
③ 查询教师的姓名及其职称 ;
④ 查询教师关系中有哪些系 ;
⑤ 查询讲授 C5课程的教师号 。
31
? T( 教师表 )
TNO
教师号
TN
姓名
SEX
性别
AGE
年龄
PROF
职称
SAL
工资
COMM
岗位津
贴
DEPT
系别
T1 李力 男 47 教授 1500 3000 计算机
T2 王平 女 28 讲师 800 1200 信息
T3 刘伟 男 30 讲师 900 1200 计算机
T4 张雪 女 51 教授 1600 3000 自动化
T5 张兰 女 39 副教授 1300 2000 信息
32
? S( 学生表 )
SNO
学号
SN
姓名
SEX
性别
AGE
年龄
DEPT
系别
S1 赵亦 女 17 计算机
S2 钱尔 男 18 信息
S3 孙珊 女 20 信息
S4 李思 男 21 自动化
S5 周武 男 19 计算机
S6 吴丽 女 20 自动化
33
? C( 课程表 )
CNO
课程号
CN
课程名
CT
课时
C1 程序设计 60
C2 微机原理 80
C3 数字逻辑 60
C4 数据结构 80
C5 数据库 60
C6 编译原理 60
C7 操作系统 60
34
? SC(选课表) TC(授课表)
SNO
学号
CNO
课程号
SCORE
成绩
TNO
教师号
CNO
课程号
S1 C1 90 T1 C1
S1 C2 85 T1 C4
S2 C5 57 T2 C5
S2 C6 80 T3 C1
S2 C7 T3 C5
S2 C5 70 T4 C2
S3 C1 0 T4 C3
S3 C2 70 T5 C5
S3 C4 85 T5 C7
S4 C1 93
S4 C2 85
S4 C3 83
S5 C2 89
35
课堂练习答案:
① 查询计算机系的全体学生 。
σDEPT=’计算机 ’ (S)或
σ5=’计算机 ’ (S)( 其中 5为 DEPT的属性序号 )
? 结果如图所示 。
SNO SN SEX AGE DEPT
S1 赵亦 女 17 计算机
S5 周武 男 19 计算机
36
② 查询工资高于 1000元的男教师 。
σ(SAL>1000) ∧ (SEX=’男 ’ ) (T)
? 结果如图所示 。
? 注意:字符型数据的值应该使用单引号括起来, 例如,
‘ 计算机 ’, ‘ 男 ’ 。
TNO TN SEX AGE PROF SAL COMM DEPT
T1 李力 男 47 教授 1500 3000 计算机
37
③ 查询教师的姓名及其职称 。
ΠTN,TNO,PROF(T)或
Π2,1,5(T)
( 其中 2,1,5分别为 TN,TNO和 PROF的属性序号 )
? 结果右图所示
? 上例表明,
投影运算可以改变
关系的属性次序
TN TNO PROF
李力 T1 教授
王平 T2 讲师
刘伟 T3 讲师
张雪 T4 教授
张兰 T5 副教授
38
④ 查询教师关系中有哪些系 。
ΠDEPT(T)
? 结果如右图所示
? 由上例可以看出, 投影后取消了某些属性列后, 就可
能出现重复行, 应该取消这些完全相同的行 。 所以投
影之后, 不但减少了属性, 元组也可能减少, 新关系
与原关系不相容 。
DEPT
计算机
信息
自动化
39
⑤ 查询讲授 C5课程的教师号 。
ΠTNO(σCNO=’C5’(TC))
? 结果如右图所示 。
? 本例中选取运算和投影运算相结合, 先在授课表中选
取满足条件的元组, 再于 TNO属性上进行投影 。
TNO
T2
T3
T5
40
第 3章 关系模型 (2)
41
3,自然连接 ( Join)
自然连接是在广义笛卡尔积 R× S中选出同名属性上
符合相等条件元组, 再进行投影, 去掉重复的同名属
性, 组成新的关系 。 即如果 R与 S具有相同的属性组 Y,
则自然连接可记作:
R∞S={t r⌒t s |tr∈R∧t s∈S∧t r[Y]=ts[Y]}
42
R∞S
(c)
图 3.10 自然连接运算举例
A B C D
a1 b1 2 5
a1 b2 4 6
a2 b3 6 7
a2 b3 6 7
43
4,除法 (Division)
? 定义,象集 (image set) 给定一个关系 R( X,Z), X
和 Z为属性组, 定义当 t[X]=x时, x在 R中的象集为 Zx,
其中 Zx={t[Z]|t∈R,t[X]=x} 。
象集 Zx表示 R中的属性组 X上值为 x的诸元组在 Z上分
量的集合 。 例如下图 11所示的关系 R:
44
A B C
a1 b1 c2
a2 b3 c7
a3 b4 c6
a1 b2 c3
a4 b6 c6
a2 b2 c3
a1 b2 c1
图 3.11 关系 R
属性 A的值域为 {a1,a2,a3,a4}其中:
a1的象集为 {(b1,c1),(b2,c3),b2,c1}
a2象集为 {(b3,c7),(b2,c3)}
a3象集为 {(b4,c6)}
45
? 除法运算是二目运算, 设有关系 R( X,Y) 与关系 S
( Y,Z), 其中 X,Y,Z为属性集合, 关系 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)
46
例 3.8 已知关系 R和 S,如图 3.12(a),(b)所示, 则 R÷ S如图
(c)所示 。
? 与除法的定义相对应,本题中
X={A}={a1,a2,a3,a4,},
Y={B,C}={(b1,c2),(b3,c7),(b4,c6),(b2,c3),(b6,c6),(b2,c1)}
Z={D}={d1,d2}。其中,关系 R中的元组在 X上各个分量
值的象集分别为:
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的象集包含 S在 (B,C)上的投影,所以
R÷ S={a1}
47
R S R÷ S
(a) (b) (c)
图 3.12
A B C
a1 b1 c2
a2 b3 c7
a3 b4 c6
a1 b2 c3
a4 b6 c6
a2 b2 c3
a1 b2 c1
B C D
b1 c2 d1
b2 c1 d1
b2 c3 d2
A
a1
48
除法运算同时从行和列的角度进行运算, 适合于包含, 部, 之
类的短语的查询 。
例 3.12 查询例表 3.13所示关系中选修了全部课程的学生学号 。
? C(课程表 ) SC(选课表 )
CNO CN
c1 数据库
c2 操作系统
c3 数据结构
c4 微机原理
SNO CNO SCORE
s1 c1 90
s1 c4 80
s2 c1 60
s2 c2 90
s2 c3 70
s2 c3 55
s3 c2 70
s4 c1 55
s4 c2 75
s4 c3 90
s4 c4 60图 3.13 课程及选课关系图
49
ΠSNO,CNO(SC)÷ ΠCNO(C)={s4}
例 3.13 查询例表 3.13所示关系中至少选修了 c1和
c3课程的学生学号 。
50
? 关系演算是以数理逻辑中的谓词演算为基础的, 通过
谓词形式来表示查询表达式 。
? 根据谓词变元的不同, 可将关系演算分为 元组关系演
算 和 域关系演算 。
3.3.1 元组关系演算
? 元组关系演算 是以元组变量作为谓词变元的基本对象。
其查询表达式为,
{t∣ P(t)}
3.3.1 元组关系演算
? 域关系演算是以域变量作为谓词变元的基本对象。其
查询表达式为,
{<x1,x2,…,x 3>∣ P(x1,x2,…,x 3)}
3.3 关系演算
51
3.4.1 广义投影
3.4.2 外连接
? 左外连接
? 右外连接
? 全外连接
3.4.3 聚集函数
3.4 扩展关系代数运算
52
3.5.1 删除元组
r ← r -E
3.5.2 插入元组
r ← r ∪ E
3.4.3 更新已有元组的属性
r ← ∏F1,F2,…,Fn (r)
3.5数据库的修改
53
? 视图是 虚表,其数据不存储,其记录来自基本表,只
在数据库中存储其定义。
? 创建视图使用语句 CREATE VIEW,其语法格式为:
CREATE VIEW <视图名 >[(<视图列表 >)]
AS <查询表达式 >
? 视图一般使用于数据库查询中,而较少用于对数据库
的修改。
3.6 视图
54
1、一数据库的关系模式如下:
S(S#,SNAME,AGE,SEX)
SC(S#,C#,GRADE)
C(C#,CNAME,TEACHER)
用关系代数表达式表达下列查询语句:
① 检索 LIU老师所授课程的课程号;
② 检索年龄大于 23岁的男同学的学号、姓名;
③ 检索 WANG同学所学课程的课程号;
④ 检索选修了 LIU老师所授的全部课程的学生姓名。
第 3章课后习题
55
2、一数据库的关系模式如下:
? 供应商关系 S(S#,Sname,,City)( 关系 S中的 S#,Sname,City分
别表示供应商号、供应商名及供应商所在城市 )
? 零件关系 P(P#,Pname,Color)( 关系 P中的 P#,Pname,Color分
别表示零件号、零件名及零件颜色 )
? 供应关系 SP(S#,P#,qty)( 关系 SP中的 S#,P#,qty分别表示供
应商号、零件号及供应量 )
用关系代数表达式表达下列查询语句:
① 给出供应零件号为 P2的供应商名;
② 将新的供应商记录插入到关系关系 S中
<‘s5’,’Tom’,’athens’>
③ 求供应零件颜色为 red的供应商名;
④ 给出供应全部零件的供应商名;
⑤ 给出供应商 S2所供应零件的全部供应商名。
第 3章 关系模型 (1)
? 本章主要讲述,
? 关系模型的数据结构
? 关系的定义和性质
? 关系数据库的基本概念
? 关系运算
2
3.1 关系数据库的结构
3.1.1 关系模型
? 关系模型就是用 二维表格 结构来表示实体及实体之间
联系的模型 。 即关系模型是一些 表格的格式, 其中包
括关系名, 属性名, 关键字等 。
? 例如, 教学数据库中教师与课程的关系模型如图 3.1所
示 。
教师关系T
TNO
教师号
TN
姓名
SEX
性别
AGE
年龄
PROF
职称
SAL
工资
COMM
岗位津贴
DEPT
系别
3
课程关系 C 授课关系 SC
图 3.1 教师 —课程数据库的关系模型
? 从各个关系的框架中, 我们可以很容易看出哪两个关
系之间有 联系 。 例如:
? 教师关系和授课关系有公共的属性, 教师号,, 则表明这两
个关系有联系 。
? 而课程关系和授课关系有公共的属性, 课程号,, 则表明这
两个关系也有联系 。
CNO
课程号
CN
课程名
CT
课时
TNO
教师号
CNO
课程号
4
3.1.2 关系的定义
1,域 ( Domain)
? 域是一组具有相同数据类型的值的集合, 又称为 值域
( 用 D表示 ) 。 关系中用域表示属性的取值范围 。 例如
整数, 实数, 字符串的集合 。
域中所包含的值的个数称为域的 基数 ( 用 m表示 ) 。
例如:
D1={李力, 王平, 刘伟 } m1=3
D2={男, 女 } m2=2
D3={47,28,30} m3=3
? 其中, D1,D2,D3为域名, 分别表示教师关系中姓名, 性别,
年龄的集合 。
5
2,笛卡尔积 (Cartesian Product)
? 给定一组域 D1,D2,…, Dn( 它们可以包含相同的元素,
即可以完全不同, 也可以部分或全部相同 ) 。 D1,
D2,…, Dn的笛卡尔积为 D1× D2× …… × Dn={( d1,
d2,…, dn) |di∈ Di,i=1,2,…, n}。
由定义可以看出, 笛卡尔积也是一个集合 。
其中:
① 元素中的每一个 di叫做一个分量 (Component),来自相应的域
( di∈ Di)
② 每一个元素 ( d1,d2,d3,…, dn) 叫做一个 n元组 ( n-tuple),
简称 元组 ( Tuple) 。 但元组不是 di的集合, 元组的每个分量 ( di)
是按序排列的 。 如:
( 1,2,3) ≠( 2,3,1) ≠( 1,3,2) 。
6
③ 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
7
④ 笛卡尔积可用二维表的形式表示 。
例如, 上述的 6个元组可表示成表 3.2。
表 3.2 D1和 D2的笛卡尔积
? 由上例可以看出, 笛卡尔积实际是一个二维表, 表的框架由
域构成, 表的任意一行就是一个元组, 表中的每一列来自同
一域, 如第一个分量来自 D1,第二个分量来自 D2。
姓名 性别
李力 男
李力 女
王平 男
王平 女
刘伟 男
刘伟 女
8
3,关系 ( Relation)
? 笛卡尔积 D1× D2× … × Dn的任一子集称为定义在
域 D1,D2,… Dn上的 n元 关系 ( Relation), 可用
R( D1,D2…… Dn) 表示
? 如上例 D1× D2笛卡尔积的子集可以构成教师关系 T1,如
下表:
表 3.3 教师关系 T1
姓名 性别
李力 男
王平 女
刘伟 男
9
几点说明:
① R为关系名, n称为关系的目或度 ( Degree) 。
当 n=1时, 称为 单元 关系, 当 n=2时, 称为 二元 关系 。 … 当 n=n
时, 称为 n元 关系 。 如上例为二元关系, 关系名为 T1。
② 数学上关系是笛卡尔积的任意子集, 但在实际应用中
关系是笛卡尔积中所取的有意义的子集 。 例如在表 3.2中
选取一个子集构成如下关系, 显然不符合实际情况
姓名 性别
李力 男
李力 女
表 3.4 不符合实际意义的关系
10
? 尽管 关系 与 二维表格 是非常类似的, 但它们之间又有
重要的区别 。 关系具有如下特性:
1,关系中不允许出现相同的元组 。
2,关系中元组的顺序 ( 即行序 ) 是无关紧要的, 在一个关系中可
以任意交换两行的次序 。
3,关系中属性的顺序是无关紧要的, 即列的顺序可以任意交换 。
交换时, 应连同属性名一起交换, 否则将得到不同的关系 。
4,同一属性名下的各个属性值必须来自同一个域, 是同一类型的
数据 。
5,关系中各个属性必须有不同的名字, 不同的属性可来自同一个
域 。
3.1.3 关系的性质
11
例如, 有如下表中关系, 职业与兼职是两个不同的属性, 但它们
取自同一个域,职业= { 教师, 工人, 辅导员 } 。
姓名 职业 兼职
张强 教师 辅导员
王丽 工人 教师
刘宁 教师 辅导员
表 3.5 关系
12
6,关系中每一分量必须是不可分的数据项, 或者说所有属性值都
是原子的, 即是一个确定的值, 而不是值的集合 。 满足此条
件的关系称为 规范化关系, 否则称为 非规范化关系 。
例如, 在表 3.6中, 籍贯含有省, 市/县两项, 出现了, 表中
有表, 的现象, 则为非规范化关系, 而把籍贯分成省, 市/县两
列, 将其规范化, 如表 3.7所示 。
表 3.6 表 3.7
姓名 籍贯 姓名 省 市/县
省 市/县
张强 吉林 长春 张强 吉林 长春
王丽 山西 大同 王丽 山西 大同
13
1,候选键与关系键
2,主属性与非码属性
? 主属性,包含在主码中的的各属性称为主属性 。
? 非码属性,不包含在任何候选码中的属性称为非码属
性 。
在最简单的情况下, 一个候选码只包含一个属性, 如学生
关系中的, 学号,, 教师关系中的, 教师号, 。 在最极终端的情
况下, 所有属性的组合是关系的候选码, 这时称为 全码 ( all-
key) 。
3.1.4 关系的键
14
3,外部关系键
? 如果关系 R2的一个或一组属性 X不是 R2的主码, 而是
另一关系 R1的主码, 则该属性或属性组 X称为关系 R2
的 外部关系键 或 外码 ( Foreign key) 。 并称关系 R2为
参照关系, 关系 R1为 被参照关系 。
例如 学生 ( 学号, 姓名, 系名 ), 系 ( 系名, 地址,
系主任 ), 则属性, 系名, 为学生关系模式的外码,
称学生为 参照关系, 系为 被参照关系 。
15
3.2 关系代数
关系代数的运算对象是关系, 运算结果也是关
系, 关系代数用到的运算符主要包括四类:
? 集合运算符, ∪ ( 并 ), ∩( 交 ), -( 差 ), X( 广义笛
卡尔积 ) ;
? 专门的关系运算符, σ(选择 ),∏( 投影 ), ∞( 连接 ), *
( 自然连接 ), ÷ ( 除 ) ;
? 算术比较运算符, >( 大于 ), ≥( 大于等于 ), <( 小于 ),
≤( 小于等于 ), =( 等于 ), ≠( 不等于 ) ;
? 逻辑运算符, ∧ ( 与 ),∨ ( 或 ),┐( 非 )
16
关系代数的运算按运算对象的不同主要分为两类:
? 传统的集合运算:把关系看成元组的集合, 以元组作
为集合中元素来进行运算, 其运算是从关系的, 水平,
方向即 行 的角度进行的 。 包括并, 差, 交和笛卡尔积
等运算 。
? 专门的关系运算:不仅涉及 行 运算, 也涉及 列 运算,
这种运算是为数据库的应用而引进的特殊运算 。 包括
选取, 投影, 连接和除法等运算 。
同时, 根据运算对象的个数还可以分为:
? 一元运算:只对一个关系进行运算 。 例如:选取, 投
影, 命名运算 。
? 二元运算:对两个关系进行运算 。 例如:并, 差, 交
和笛卡尔积等运算
17
3.2.1 传统的集合运算
1,并 ( Union)
? 关系 R和关系 S的并由属于 R或属于 S的元组组成, 即 R和 S的所
有元组合并, 删去重复元组, 组成一个新关系, 其结果仍为 n
目关系 。 记作:
R∪ S={t|t∈ R∨ t∈ S}
? 对于关系数据库, 记录的插入和添加可通过并运算实现 。
2,差 ( Difference)
? 关系 R与关系 S的差由属于 R而不属于 S的所有元组组成, 即 R
中删去与 S中相同的元组, 组成一个新关系, 其结果仍为 n目
关系 。 记作:
R-S={t|t∈ R∧ ┐t∈ S}
? 通过差运算, 可实现关系数据库记录的删除 。
18
3,交 ( Intersection)
?关系 R与关系 S的交由既属于 R又属于 S的元组组成,
即 R与 S中相同的元组, 组成一个新关系, 其结果仍
为 n目关系 。 记作:
R∩S={t|t∈ R ∧ t∈ S}
?如果两个关系没有相同的元组, 那么它们的交为空 。
?两个关系的并和差运算为基本运算 ( 即不能用其他
运算表达的运算 ), 而交运算为非基本运算, 交运
算可以用差运算来表示:
R∩S=R-(R-S)
19
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}
?关系的广义笛卡尔积可用于两关系的连接操作 ( 连
接操作将在一节中介绍 ) 来实现 。
20
? 【 例 3.1】 如图 3.8(a),(b)所示的两个关系 R与 S为
相容关系, (c)为 R与 S 的并, (d)为 R与 S的交, (e)为
R与 S的差, (f)为 R与 S的广义笛卡尔积 。
R S
(a) (b)
A B C A B C
a1 b1 c1 a1 b1 c1
a1 b1 c2 a2 b2 c1
a2 b2 c1 a2 b3 c2
21
R∪ S R-S
(c) (d)
R∩S
( e)
A B C A B C
a1 B1 c1 a1 b1 c2
a1 B1 c2
a2 B2 c1
a2 B3 c2
A B C
a1 B1 c1
a2 B2 c1
22
R× S
A B C A B C
a1 b1 c1 a1 b1 c1
a1 b1 c1 a2 b2 c1
a1 b1 c1 a2 b3 c2
a1 b1 c2 a1 b1 c1
a1 b1 c2 a2 b2 c1
a1 b1 c2 a2 b3 c2
a2 b2 c1 a1 b1 c1
a2 b2 c1 a2 b2 c1
a2 b2 c1 a2 b3 c2
( f)
图 3.8 传统的集合运算
23
3.2.2 专门的关系运算
? 由于传统的集合运算, 只是从行的角度进行, 但是要
灵活地实现关系数据库多样的查询操作, 就必须引入
专门的关系运算 。
? 引入几个概念:
( 1) 设关系模式为 R(A1,A2,…… An),它的一个关
系为 R,t∈ R表示 t是 R的一个元组, t[Ai]则表示元
组 t中相应于属性 Ai的一个分量 。
24
( 2) R为 n目关系, S为 m目关系, tr∈ R,ts∈ S,trts称
为元组的连接, 它是一个 n+m列的元组, 前 n个分量
为 R的一个 n元组, 后 m个分量为 S中的一个 m元组 。
( 3)给定一个关系 R( X,Z),X和 Z为属性组,定
义当 t[X]=x时,x在 R中的象集为
Zx={t[Z]|t∈ R,t[X]=x},它表示 R中的属性组 X上值为 x
的诸元组在 Z上分量的集合。
25
1,选择 ( Selection)
? 选择运算是单目运算, 是根据一定的条件在给定的关
系 R中选取若干个元组, 组成一个新关系, 记作:
σF(R)={t|t∈ R∧ F(t)为真 }
? 其中, σ为选取运算符, F为选取的条件, 它由运算对
象 ( 属性名, 常数, 简单函数 ), 算术比较运算符
( >, ≥,<,≤,=,≠) 和逻辑运算符 ( ∨ ∧ ┐) 连
接起来的逻辑表达式, 结果为逻辑值, 真, 或, 假, 。
? 选取运算实际上是从关系 R中选取使逻辑表达式为真
的元组, 是从行的角度进行的运算 。
26
例 3.2 查询计算机系的全体学生 。
σdepartment_name=“计算机系, (student)或
σ3=’计算机系 ’ (student)( 其中 3为 department_name的属性
序号 )
? 结果教材 P53图 3.9所示 。
例 3.3 查询学号大于, s000004”的学生信息 。
σstudent_number>“s000004”(student)
例 3.4 查询计算机系的查询学号大于, s000004”的学生信
息 。
σdepartment_name=“计算机系, ∧ student_number>” s000004”(student)
27
2,投影 ( Projection)
? 投影运算也是单目运算, 关系 R上的投影是从 R中选择
出若干属性列, 组成新的关系, 即对关系在垂直方向
进行的运算, 从左到右按照指定的若干属性及顺序取
出相应列, 删去重复元组 。 记作:
ΠA(R)={t[A]|t∈ R}
? 其中 A为 R中的属性列, Π为投影运算符 。
? 从其定义可看出,投影运算是从列的角度进行的运算,
这正是选取运算和投影运算的区别所在。选取运算是
从关系的水平方向上进行运算的,而投影运算则是从
关系的垂直方向上进行的。
28
例 3.5 查询学生的学号及姓名 。
Πstudent_number,student_name(student)或
Π1,2(student)
? 结果如教材 P54图 3.10图所示。
例 3.6查询出计算机系的学生姓名 。
Πstudent_name (σdepartment_name=“计算机系, (student))
Student_
name
冯蔼妍
陈国国
29
? 由例 3.6 可以看出, 投影后取消了某些属性列后, 就可
能出现重复行, 应该取消这些完全相同的行 。 所以投
影之后, 不但减少了属性, 元组也可能减少 。
30
课堂练习 3.2:
? 下图给出了教学数据库的关系模型及其实例, 包含五
个关系:教师关系 T,学生关系 S,课程关系 C,选课
关系 SC和授课关系 TC,分别对应五张表,请完成以下
操作,
① 查询计算机系的全体学生 ;
② 查询工资高于 1000元的男教师 ;
③ 查询教师的姓名及其职称 ;
④ 查询教师关系中有哪些系 ;
⑤ 查询讲授 C5课程的教师号 。
31
? T( 教师表 )
TNO
教师号
TN
姓名
SEX
性别
AGE
年龄
PROF
职称
SAL
工资
COMM
岗位津
贴
DEPT
系别
T1 李力 男 47 教授 1500 3000 计算机
T2 王平 女 28 讲师 800 1200 信息
T3 刘伟 男 30 讲师 900 1200 计算机
T4 张雪 女 51 教授 1600 3000 自动化
T5 张兰 女 39 副教授 1300 2000 信息
32
? S( 学生表 )
SNO
学号
SN
姓名
SEX
性别
AGE
年龄
DEPT
系别
S1 赵亦 女 17 计算机
S2 钱尔 男 18 信息
S3 孙珊 女 20 信息
S4 李思 男 21 自动化
S5 周武 男 19 计算机
S6 吴丽 女 20 自动化
33
? C( 课程表 )
CNO
课程号
CN
课程名
CT
课时
C1 程序设计 60
C2 微机原理 80
C3 数字逻辑 60
C4 数据结构 80
C5 数据库 60
C6 编译原理 60
C7 操作系统 60
34
? SC(选课表) TC(授课表)
SNO
学号
CNO
课程号
SCORE
成绩
TNO
教师号
CNO
课程号
S1 C1 90 T1 C1
S1 C2 85 T1 C4
S2 C5 57 T2 C5
S2 C6 80 T3 C1
S2 C7 T3 C5
S2 C5 70 T4 C2
S3 C1 0 T4 C3
S3 C2 70 T5 C5
S3 C4 85 T5 C7
S4 C1 93
S4 C2 85
S4 C3 83
S5 C2 89
35
课堂练习答案:
① 查询计算机系的全体学生 。
σDEPT=’计算机 ’ (S)或
σ5=’计算机 ’ (S)( 其中 5为 DEPT的属性序号 )
? 结果如图所示 。
SNO SN SEX AGE DEPT
S1 赵亦 女 17 计算机
S5 周武 男 19 计算机
36
② 查询工资高于 1000元的男教师 。
σ(SAL>1000) ∧ (SEX=’男 ’ ) (T)
? 结果如图所示 。
? 注意:字符型数据的值应该使用单引号括起来, 例如,
‘ 计算机 ’, ‘ 男 ’ 。
TNO TN SEX AGE PROF SAL COMM DEPT
T1 李力 男 47 教授 1500 3000 计算机
37
③ 查询教师的姓名及其职称 。
ΠTN,TNO,PROF(T)或
Π2,1,5(T)
( 其中 2,1,5分别为 TN,TNO和 PROF的属性序号 )
? 结果右图所示
? 上例表明,
投影运算可以改变
关系的属性次序
TN TNO PROF
李力 T1 教授
王平 T2 讲师
刘伟 T3 讲师
张雪 T4 教授
张兰 T5 副教授
38
④ 查询教师关系中有哪些系 。
ΠDEPT(T)
? 结果如右图所示
? 由上例可以看出, 投影后取消了某些属性列后, 就可
能出现重复行, 应该取消这些完全相同的行 。 所以投
影之后, 不但减少了属性, 元组也可能减少, 新关系
与原关系不相容 。
DEPT
计算机
信息
自动化
39
⑤ 查询讲授 C5课程的教师号 。
ΠTNO(σCNO=’C5’(TC))
? 结果如右图所示 。
? 本例中选取运算和投影运算相结合, 先在授课表中选
取满足条件的元组, 再于 TNO属性上进行投影 。
TNO
T2
T3
T5
40
第 3章 关系模型 (2)
41
3,自然连接 ( Join)
自然连接是在广义笛卡尔积 R× S中选出同名属性上
符合相等条件元组, 再进行投影, 去掉重复的同名属
性, 组成新的关系 。 即如果 R与 S具有相同的属性组 Y,
则自然连接可记作:
R∞S={t r⌒t s |tr∈R∧t s∈S∧t r[Y]=ts[Y]}
42
R∞S
(c)
图 3.10 自然连接运算举例
A B C D
a1 b1 2 5
a1 b2 4 6
a2 b3 6 7
a2 b3 6 7
43
4,除法 (Division)
? 定义,象集 (image set) 给定一个关系 R( X,Z), X
和 Z为属性组, 定义当 t[X]=x时, x在 R中的象集为 Zx,
其中 Zx={t[Z]|t∈R,t[X]=x} 。
象集 Zx表示 R中的属性组 X上值为 x的诸元组在 Z上分
量的集合 。 例如下图 11所示的关系 R:
44
A B C
a1 b1 c2
a2 b3 c7
a3 b4 c6
a1 b2 c3
a4 b6 c6
a2 b2 c3
a1 b2 c1
图 3.11 关系 R
属性 A的值域为 {a1,a2,a3,a4}其中:
a1的象集为 {(b1,c1),(b2,c3),b2,c1}
a2象集为 {(b3,c7),(b2,c3)}
a3象集为 {(b4,c6)}
45
? 除法运算是二目运算, 设有关系 R( X,Y) 与关系 S
( Y,Z), 其中 X,Y,Z为属性集合, 关系 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)
46
例 3.8 已知关系 R和 S,如图 3.12(a),(b)所示, 则 R÷ S如图
(c)所示 。
? 与除法的定义相对应,本题中
X={A}={a1,a2,a3,a4,},
Y={B,C}={(b1,c2),(b3,c7),(b4,c6),(b2,c3),(b6,c6),(b2,c1)}
Z={D}={d1,d2}。其中,关系 R中的元组在 X上各个分量
值的象集分别为:
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的象集包含 S在 (B,C)上的投影,所以
R÷ S={a1}
47
R S R÷ S
(a) (b) (c)
图 3.12
A B C
a1 b1 c2
a2 b3 c7
a3 b4 c6
a1 b2 c3
a4 b6 c6
a2 b2 c3
a1 b2 c1
B C D
b1 c2 d1
b2 c1 d1
b2 c3 d2
A
a1
48
除法运算同时从行和列的角度进行运算, 适合于包含, 部, 之
类的短语的查询 。
例 3.12 查询例表 3.13所示关系中选修了全部课程的学生学号 。
? C(课程表 ) SC(选课表 )
CNO CN
c1 数据库
c2 操作系统
c3 数据结构
c4 微机原理
SNO CNO SCORE
s1 c1 90
s1 c4 80
s2 c1 60
s2 c2 90
s2 c3 70
s2 c3 55
s3 c2 70
s4 c1 55
s4 c2 75
s4 c3 90
s4 c4 60图 3.13 课程及选课关系图
49
ΠSNO,CNO(SC)÷ ΠCNO(C)={s4}
例 3.13 查询例表 3.13所示关系中至少选修了 c1和
c3课程的学生学号 。
50
? 关系演算是以数理逻辑中的谓词演算为基础的, 通过
谓词形式来表示查询表达式 。
? 根据谓词变元的不同, 可将关系演算分为 元组关系演
算 和 域关系演算 。
3.3.1 元组关系演算
? 元组关系演算 是以元组变量作为谓词变元的基本对象。
其查询表达式为,
{t∣ P(t)}
3.3.1 元组关系演算
? 域关系演算是以域变量作为谓词变元的基本对象。其
查询表达式为,
{<x1,x2,…,x 3>∣ P(x1,x2,…,x 3)}
3.3 关系演算
51
3.4.1 广义投影
3.4.2 外连接
? 左外连接
? 右外连接
? 全外连接
3.4.3 聚集函数
3.4 扩展关系代数运算
52
3.5.1 删除元组
r ← r -E
3.5.2 插入元组
r ← r ∪ E
3.4.3 更新已有元组的属性
r ← ∏F1,F2,…,Fn (r)
3.5数据库的修改
53
? 视图是 虚表,其数据不存储,其记录来自基本表,只
在数据库中存储其定义。
? 创建视图使用语句 CREATE VIEW,其语法格式为:
CREATE VIEW <视图名 >[(<视图列表 >)]
AS <查询表达式 >
? 视图一般使用于数据库查询中,而较少用于对数据库
的修改。
3.6 视图
54
1、一数据库的关系模式如下:
S(S#,SNAME,AGE,SEX)
SC(S#,C#,GRADE)
C(C#,CNAME,TEACHER)
用关系代数表达式表达下列查询语句:
① 检索 LIU老师所授课程的课程号;
② 检索年龄大于 23岁的男同学的学号、姓名;
③ 检索 WANG同学所学课程的课程号;
④ 检索选修了 LIU老师所授的全部课程的学生姓名。
第 3章课后习题
55
2、一数据库的关系模式如下:
? 供应商关系 S(S#,Sname,,City)( 关系 S中的 S#,Sname,City分
别表示供应商号、供应商名及供应商所在城市 )
? 零件关系 P(P#,Pname,Color)( 关系 P中的 P#,Pname,Color分
别表示零件号、零件名及零件颜色 )
? 供应关系 SP(S#,P#,qty)( 关系 SP中的 S#,P#,qty分别表示供
应商号、零件号及供应量 )
用关系代数表达式表达下列查询语句:
① 给出供应零件号为 P2的供应商名;
② 将新的供应商记录插入到关系关系 S中
<‘s5’,’Tom’,’athens’>
③ 求供应零件颜色为 red的供应商名;
④ 给出供应全部零件的供应商名;
⑤ 给出供应商 S2所供应零件的全部供应商名。