北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
1.2关系代数
? 关系模型的重要部分是关系操纵, 关系
代数是一种抽象的查询语言, 是关系数
据操纵语言的一种传统表达方式, 它是
用对关系的运算来表达查询的 。 利用关
系代数可以演示一个查询语言从关系数
据库系统中检索信息的潜力, 可以用最
简单的形式来表达所有关系数据库查询
语言必须完成的运算的集合, 这些基本
的运算对解释标准查询语言 SQL如何被执
行很有帮助, 同时也有利于培养关系运
算的思维能力 。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
1.2关系代数
? 关系代数的运算对象是关系,运算结果亦为关
系。关系代数用到的运算符包括四类;集合运
算符、专门的关系运算符、算术比较符和逻辑
运算符。关系代数的运算按运算符的不同可分
为传统的集合运算和专门的关系运算两类。其
中传统的集合运算将关系看成元组的集合,其
运算是从关系的, 水平, 方向即行的角度来进
行。而专门的关系运算不仅涉及行而且涉及列。
比较运算符和逻辑运算符是用来辅助专门的关
系运算符进行操作的。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
关系代数运算符
运算符 符号 含义 键盘格式 示例
集合
运算符
∪ 并 UNION R∪S,或 R UNION S
∩ 交 INTERSECT R∩S,或 R INTERSECT S
- 差 MINUS R-S,或 R MINUS S
× 乘 TIMES R× S,或 R TIMES S
专门
关系
运算符
σ 选择 R where C σ 姓名 =“张三, (S)或
S where 姓名 =‘张三 ’
π 投影 R[ ] π 考号,姓名 (S)或 S[考号,姓名 ]
∞ 连接 JOIN R∞S,或 R JOIN S
÷ 除 DIVIDEBY R÷ S,或 R DIVIDEBY S
关系代数中,这些运算经有限次复合后形成的式子称为关系
代数表达式。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
1.2.1传统的集合运算
? 传统的集合运算是二目运算,包括并、差、交、
广义笛卡尔积。
? 定义 1.2.1 设关系 R和关系 S具有相同的目 n(即
两个关系都有 n个属性 ),且相应的属性取自同
一个域, 则可以定义并, 差, 交运算如下:
– 并 (Union),关系 R 与 关 系 S 的 并 记 作,
R∪S={t|t∈R∨t∈S}
其结果仍为 n目关系, 由属于 R或属于 S的元组
组成 。
– 差 (Difference),关系 R与关系 S的差记作,R—
S={ t|t∈R∧t!∈S }
其结果仍为 n目关系, 由属于 R而不属于 S的所
有元组组成 。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
1.2.1传统的集合运算
– 交 (Intersection):关系 R与关系 S的交记作:
R∩S={ t|t∈R∧t∈S }
其结果仍为 n目关系, 由既属于 R又属于 S的元
组组成 。 关系的交可以用差来表示, 即 R∩S=R -(R-
S)。
– 广义笛卡尔积 (Extended Cartesian Product):两
个分别为 n目和 m目的关系 R和 S的广义笛卡尔积是一
个 (n+m)列的元组的集合 。 元组的前 n列是关系 R的
一个元组, 后 m列是关系 S的一个元组 。 若 R有 k1个
元组, S有 k2个元组, 则关系 R和关系 S的广义笛卡
尔积有 k1× k2 个 元 组 。 记 作,
R× S={trts|tr∈R∧ts∈S }
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
传统集合运算举例
R
A B C
a1 b1 c1
a1 b2 c2
a2 b2 c1
R∪S
A B C
a1 b1 c1
a1 b2 c2
a2 b2 c1
a1 b3 c2
S
A B C
a1 b2 c2
a1 b3 c2
a2 b2 c1
R∩S
A B C
a1 b2 c2
a2 b2 c1
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
传统集合运算举例
R
A B C
a1 b1 c1
a1 b2 c2
a2 b2 c1
R-S
A B C
a1 b1 c1
R× S
A B C A B C
a1 b2 c1 a1 b2 c2
a1 b2 c1 a1 b3 c2
a1 b2 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
S
A B C
a1 b2 c2
a1 b3 c2
a2 b2 c1
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
1.2.2 专门的关系运算
? 专门的关系运算包括选择, 投影, 连接,
除等 。 为了叙述上的方便, 先引入几个
常用记号 。
– 设关系模式为 R(Al,A2,…,An)。 它的一
个关系设为 R。 t∈R 表示 t是 R的一个元组 。
t[Ai]则表示元组 t中相应于属性 Ai的一个分
量 。
– 若 A={Ai1,Ai2,…,Aik},其中 Ail,
Ai2,…,Aik是 A1,A2,…,An中的一部分,
则 A称为属性列或域列 。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
1.2.2 专门的关系运算
– R 为 n 目 关 系, S 为 m 目 关 系 。
tr∈R,ts∈S,trts 称为元组的连接 。 它是一
个 n+m列的元组, 前 n个分量为 R中的一个 n元
组, 后 m个分量为 S中的一个 m元组 。
– 给定一个关系 R(X,Z),X和 Z为属性组 。 定
义 t[X]=x时,x在 R中的象集 (Images Set)为:
Zx={ t[Z]︱ t∈R,t[X]=x}
它表示 R中属性组 X上值为 x的诸元组在 Z上分
量的集合。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
学生 -课程数据库
S 学生表
学号 姓名 性别 年龄 所在系
Sno Sname Ssex Sage Sdept
2000101 张明 男 19 CS
2000102 李华 女 20 IS
2000103 王强 男 18 MA
2000104 秦永 男 19 CS
C 课程表
课程号 课程名 学分
Cno Cname Ccredit
1 数据库 3
2 数学 4
3 信息系统 3
4 操作系统 3
SC 学生选课表
学号课 程号 成绩
Sno Cno Grade
200101 1 92
200101 2 85
200101 3 88
200102 2 90
200102 3 80
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
选择 (Selection)
? 定义 1.2.2 选择 选 择 又 称 为 限 制
(Restriction),它是在关系 R中选择满足给定
条件的诸元组,记作,
σ F(R)={ t︱ t∈R∧F(t)= ‘真 ’ }
其中 F表示选择条件,它是一个逻辑表达式,取
逻辑值 ‘ 真 ’ 或 ‘ 假 ’ 。 逻辑表达式 F由逻辑
运算符 ﹁,∧,∨ 连接各算术表达式组成 。 算术
表达式的基本形式为,X1θ Y1,其中 θ 表示比
较运算符, 它可以是 >,≥, <,≤, =或 ≠ ;
X1,Y1等是属性名, 或为常量, 或为简单函数;
属性名也可以用它的序号来代替 。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
选择 (Selection)
? 选择运算实际上是从关系 R中选取使逻辑表达
式 F为真的元组 。 这是从行的角度进行的运算,
是对行的水平分解 。
例 1 查询信息系 (IS)全体学生
σ Sdept=”IS”(S)
或 σ 5=”IS”(S)
其中下角标, 5”为 Sdept的属性序号 。
或 S where Sdept=”IS”
例 2 查询年龄在 19到 20岁之间的学生
σ Sage≥ 19∧Sage≤ 20(S)
或 σ 4≥ 19∧ 4≤ 20(S)
或 S where Sage>=19 and Sage<=20
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
投影 (Projection)
? 定义 1.2.3 投影 关系 R上的投影是从 R中
选择出若干属性列组成新的关系, 是对
关系的垂直分解 。 记作:
π A(R)={t[A]|t∈R}
其中 A为 R中的属性列集合 。
? 投影之后不仅取消了原关系中的某些列,
而且还可能取消某些元组, 因为取消了
某些属性列后, 就可能出现重复行, 应
取消这些完全相同的行 。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
投影 (Projection)
例 3 查询学生的姓名和所在系 。
π Sname,Sdept(S)
或 π 2,5(S)
或 S[Sname,Sdept]
例 4 查询学生关系 Student中都有哪些系 。
π Sdept(S)
或 S[Sdept]
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
连接 (Join)
? 定义 1.2.4 连接 连接也称为 θ 连接 。 它是从
两个关系的笛卡尔积中选取属性间满足一定条
件的元组 。 记作:
R∞S={trts|tr∈R∧ts∈S∧tr[A] θ ts[B]}Aθ B
其中 A和 B分别为 R和 S上度数相等且可比的属
性组。 θ 是比较运算符。连接运算的结果是从
R和 S的广义笛卡尔积 R× S中选取 R关系在 A属
性组上的值与 S关系在 B属性组上值满足比较关
系 θ 的元组。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
连接 (Join)
? 连接运算中有两种最为重要也最为常用的连接,
一种是等值连接 (equijoin),另一种是自然连
接 (Naturaljoin)。 另外还有外连接, 左连接,
右连接等 。
? θ 为, =”的连接运算称为等值连接 。 它是从关
系 R与 S的广义笛卡尔积中选取 A,B属性值相等
的那些元组,
? 自然连接 (Natural join)是一种特殊的等值连
接, 它要求两个关系中进行比较的分量必须是
相同的属性组, 并且在结果中把重复的属性列
去掉 。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
外连接
? 定义 1.2.5 外连接 表 R(A1,A2,…,An,B1,
B2,…,Bk)和 S(B1,B2,…,Bk,C1,C2,…,Cm)的外连
接 R∞oS,行 t属于表 R∞oS, 如果下列情况之一
发生:
1) 可连接的行 u,v分别在 R和 S中, 有
u[Bi]=v[Bi] ( 0<=i<=k ) 成立,此时
t[A]=u[A],t[B]=u[B],t[C]=v[C]。
2) 表 R中的一个行 u使得 S中没有一个可以
与 之 连 接 的 行, 此时,
t[A]=u[A],t[B]=u[B],t[C]=null。
3) 表 S中的一个行 v使得 R中没有一个可以
与 之 连 接 的 行, 此时,
t[A]=null,t[B]=v[B],t[C]=v[C]。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
外连接
? 由定义知, 外连接保留了未匹配的行 。
也就是说, 在外连接一端的表上的行,
即使在另一端上的表没有与之相匹配的
连接列值也会出现在外连接的结果中 。
左连接和右连接运算只是因为我们需要
在某一边上保留未匹配的行而已 。 左连
接保留了在操作符左边的未匹配行, 右
连接保留了在操作符右边的未匹配行 。
? 一般的连接操作是从行的角度进行运算 。
但自然连接还需要取消重复列, 所以是
同时从行和列的角度进行运算 。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
关系代数连接运算符
符号 含义 键盘格式 示例
∞ Aiθ Bj θ 连接 JOIN(Aiθ Bj) R∞A 1>B2 S
∞o 外连接 OUTER JOIN R ∞o S
∞Lo 左连接 LOUTER JOIN R ∞Lo S
∞Ro 右连接 ROUTER JOIN R ∞Ro S
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
连接运算举例
R
A B C
a1 b1 5
a1 b2 6
a2 b3 8
a2 b4 12
S
B E
b1 3
b2 7
b3 10
b3 2
b5 2
θ 连接 R ∞ C<E 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
等值连接 R ∞ R.B=S.B S
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
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
连接运算举例
R
A B C
a1 b1 5
a1 b2 6
a2 b3 8
a2 b4 12
S
B E
b1 3
b2 7
b3 10
b3 2
b5 2
外连接 R∞ o S
A B C E
a1 b1 5 3
a1 b2 6 7
a2 b3 8 10
a2 b3 8 2
a2 b4 12 null
null b5 null 2
左连接 R∞ Lo S
A B C E
a1 b1 5 3
a1 b2 6 7
a2 b3 8 10
a2 b3 8 2
a2 b4 12 null
右连接 R∞ Ro S
A B C E
a1 b1 5 3
a1 b2 6 7
a2 b3 8 10
a2 b3 8 2
null b5 null 2
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
除 (Division)
? 定义 1.2.6 除 给定关系 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]。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
除 (Division)
? 除操作是同时从行和列角度进行运算 。
? 除运算是乘运算的逆运算, 给定两个表 T
和 S,如果表 R是通过 R=T× S定义的, 那
么有 T=R÷ S成立 。 在这个意义上可解释
为什么称作除运算 。
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
除运算举例
R
A B C
a1 b1 c2
a2 b3 c7
a3 b4 c6
a1 b2 c3
a4 b6 c6
a2 b2 c3
a1 b2 c1
S
B C D
b1 c2 d1
b2 c1 d1
b2 c3 d2
R÷ S
A
a1
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
除运算举例
? 在关系 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的象集包含了 S在 (B,C)属性组上的投影,
所以 R÷ S={a1}.
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
除运算举例
R 1)给出 S,求得 T=R÷ S。
注意,T× S都在 R中。
S T
2)给出 S,求得 T=R÷ S。
注意,T× S都在 R中。
S T
3)给出 S,求得 T=R÷ S。
注意,T× S都在 R中。
S T
4)给出 S,求得 T=R÷ S。
注意,T× S都在 R中 。
S T
A B C
a1 b1 c1
a2 b1 c1
a1 b2 c1
a1 b2 c2
a2 b1 c2
a1 b2 c3
a1 b2 c4
a1 b1 c5
C
c1
A B
a1 b1
a2 b1
a1 b2
C
c1
c2
A B
a1 b2
a2 b1
C
c1
c2
c3
c4
A B
a1 b2
B C
b1 c1
A
a1
a2
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
1.2.3关系代数综合例子
? 以下例子建立在下面 CAP数据库上 。
C顾客 cid cname city discnt
c001 李广 天津 10.00
c002 王开基 北京 12.00
c003 安利德 北京 8.00
c004 曹士雄 天津 8.00
c006 曹士雄 广州 0.00
P商品 pid pname city quantity price
p01 梳子 天津 111400 0.50
p02 刷子 成都 203000 0.50
p03 刀片 西安 150600 1.00
p04 钢笔 西安 125300 1.00
p05 铅笔 天津 221400 1.00
p06 文件夹 天津 123100 2.00
p07 盒子 成都 100500 1.00
A代理 aid aname city percent
a01 史可然 北京 6
a02 韩利利 上海 6
a03 杜不朗 成都 7
a04 甘瑞 北京 6
a05 敖斯群 武汉 5
a06 史可然 天津 5
O订单 ordno month cid aid pid qty dollars
1011 01 c001 a01 p01 1000 450.00
1012 01 c001 a01 p01 1000 450.00
1019 02 c001 a02 p02 400 180.00
1017 02 c001 a06 p03 600 540.00
1018 02 c001 a03 p04 600 540.00
1023 03 c001 a04 p05 500 450.00
1022 03 c001 a05 p06 400 720.00
1025 04 c001 a05 p07 800 720.00
1013 01 c002 a03 p03 1000 880.00
1026 05 c002 a05 p03 800 704.00
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
1.2.3关系代数综合例子
例 1 查询所有定购了至少一个价值为 0.50的商品
的顾客的名字 。
π cname((π pid(σ price=0.50(P))∞O)∞C)
例 2 找出全部没有在代理商 a03处订购商品的顾客
cid值 。
π cid(O)—π cid(σ aid=’a03’(O))
或 π cid( C) —π cid( σ aid=’a03’( O))
例 3找出只在代理商 a03处订购商品的顾客 。
π cid(O)—π cid(σ aid,,’a03’(O))
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
1.2.3关系代数综合例子
例 4 找出没有被任何一个在北京的顾客通过在上海的代理
商订购的所有商品 。
在北京的顾客通过在上海的代理商订购的商品:
π pid((π cid(σ city=’北京 ’ (C))∞ O)∞ σ city=’上海 ’ (A))
从所有商品中剔除以上商品:
π pid(P)—π pid((π cid(σ city=‘北京 ’ (C))∞ O)∞ σ city=’上海 ’ (A))
例 5找出订购了所有价格为 0.50的商品的顾客名字 。
πcname(( πcid,pid( O) ÷ πpid( σprice=0.50( P))) ∞C)
例 6 找出订购所有被任何人订购过一次的商品的顾客 cid。
πcid,pid( O) ÷ πpid( O)
例 7 找出所有接到至少顾客 c004订购的商品集合的订单的
代理商的 aid。
πaid,pid( O) ÷ πpid( σcid=’c004’( O))
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
1.2.3关系代数综合例子
例 8找出订购了 p01和 p07这两种商品的顾客的 cid。
错误 πcid( σpid=’p01’ and pid=’p07’( O))
错误 πcid( σpid=’p01’ or pid=’p07’( O))
正确 πcid( σpid=’p01’( O)) ∩ πcid( σpid=’p07’( O))
例 9 找出从至少一个接受订购商品 p03订单的代理商处订
购过商品的顾客 cid。
解题思路:
πcid( πaid( σpid=’p03’( O)) ∞ O)
订购商品 p03
的代理商
从这些代理商处
订购商品的顾客p03
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
1.2.3关系代数综合例子
例 10找出所有具有和在北京和天津的顾客相同的折扣率
的顾客的 cid。
本题可理解为:找出那些具有和在北京和天津的顾客相
同的折扣率的顾客的 cid。
在北京和天津的顾客的所有折扣率:
πdiscnt( σcity=’北京 ’ or city=’天津 ’ ( C))
所以有,πcid( πdiscnt( σcity=’北京 ’ or city=’天津 ’ ( C)) ∞ C)
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
例 11列出通过以下代理商订购的商品的 pid:代理商从以下
的顾客处接受订单,而这些顾客从一个接受过顾客 c001
订单的代理商处订购了至少一个商品。
接受顾客 c001订单的代理商:
π aid( σ cid=’c001’( O))
从这些代理商处订购过商品的顾客:
π cid( π aid( σ cid=’c001’( O)) ∞ O)
从这些顾客处接受过订单的代理商:
π aid( π cid( π aid( σ cid=’c001’( O)) ∞ O) ∞ O)
通过上述代理商订购的商品 pid:
π pid(π aid(π cid(π aid(σ cid=’c001’(O))∞ O)∞ O)∞ O)
1.2.3关系代数综合例子
北京邮电大学软件学院 郭文明 2003.06
,数据库设计与开发, 讲义
作业:
1.如果关系 R和 S没有共同的列属性,根据定义说明表 R× S等
于表 R∞S 。
2.对 CAP数据库,用关系代数完成下列查询。
1)找出顾客、代理商和商品都在同一个城市的三元组
( cid,aid,pid)。
2)找出顾客、代理商和商品两两不在同一个城市的三
元组( cid,aid,pid)。
3)列出所有在同一个城市代理商的 aid对。
4)找出折扣率最大和最小的顾客 cid。
5)取出销售过所有曾被顾客 c002订购过的商品的代理
商的 名字。
6)找出只从一家代理商处订购过商品的顾客 cid。