Professional Documents
Culture Documents
厦门大学计算机系
An Introduction to Database System
第二章 关系数据库
2.1 关系模型概述
2.2 关系数据结构
2.3 关系的完整性
2.4 关系代数
2.5 关系演算
80 年代后,关系数据库系统成为最重要、
最流行的数据库系统
典型代表: ISBL
域关系演算语言
谓词变元的基本对象是域变量
典型代表: QBE
具有关系代数和关系演算双重特点的语言
典型代表: SQL
An Introduction to Database System
关系操作集合(续)
4) 关系数据语言的特点
关系语言是一种高度非过程化的语言
存取路径的选择由 DBMS 的优化机制来完成
用户不必用循环结构就可以完成数据操作
能够嵌入高级语言中使用
关系代数、元组关系演算和域关系演算三种
语言在表达能力上完全等价
属性的类型、长度
概述
传统的集合运算
专门的关系运算
1. 关系代数
一种抽象的查询语言
用对关系的运算来表达查询
2 .关系代数运算的三个要素
运算对象:关系
运算结果:关系
运算符:四类
运算符 含义 运算符 含义
集 ∪ 并 比 > 大于
合 - 差 较 ≥ 大于等于
运 ∩ 交 运 < 小于
算 算
× 广义笛 符 ≤ 小于等于
符 卡尔积 = 等于
≠ 不等于
An Introduction to Database System
概述 ( 续 )
表 2.4 关系代数运算符(续)
运算符 含义 运算符 含义
专门的 σ 选择 逻辑运 非
关系 π 投影 算符 ∧ 与
运算符 连接 ∨ 或
÷ 除
5 .表示记号
( 1 ) R , tR , t[Ai]
( 3 ) tr ts
R 为 n 目关系, S 为 m 目关系。 tr
R , tsS , tr ts 称为元组的连接。它是一个
给定一个关系 R ( X , Z ), X 和 Z 为属性组。
当 t[X]=x 时, x 在 R 中的象集( Images Set )
为:
Zx={t[Z]|t R , t[X]=x}
概述
传统的集合运算
专门的关系运算
R-S
仍为 n 目关系,由属于 R 而不属于 S 的所
有元组组成
R -S = { t|tR∧tS }
An Introduction to Database System
差(续)
A B C
R a1 b1 c1
a1 b2 c2
a2 b2 c1 A B C
R-S
a1 b1 c1
A B C
S a1 b2 c2
a1 b3 c2
a2 b2 c1 An Introduction to Database System
3. 交( Intersection )
R 和S
具有相同的目 n
相应的属性取自同一个域
R ∩S
仍为 n 目关系,由既属于 R 又属于 S 的元组
组成
R ∩S = { t|t R∧t S }
R ∩S = R –(R-S )
An Introduction to Database System
交 (续)
A B C
R a1 b1 c1
A B C
a1 b2 c2
a1 b2 c2
a2 b2 c1 R∩S
a2 b2 c1
A B C
S a1 b2 c2
a1 b3 c2
a2 b2 c1 An Introduction to Database System
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 ∧ tsS } An Introduction to Database System
广义笛卡尔积 ( 续 )
A B C A B C A B C
a1 b1 c1 a1 b2 c2
R a1 b1 c1
a1 b1 c1 a1 b3 c2
a1 b2 c2
a1 b1 c1 a2 b2 c1
a2 b2 c1 R×S a1 b2 c2 a1 b2 c2
a1 b2 c2 a1 b3 c2
A B C a1 b2 c2 a2 b2 c1
S a1 b2 c2 a2 b2 c1 a1 b2 c2
a1 b3 c2 a2 b2 c1 a1 b3 c2
a2 b2 c1 a2 b2 c1 a2 b2 c1
An Introduction to Database System
2.4 关系代数
概述
传统的集合运算
专门的关系运算
95001 李勇 男 20 CS
95002 刘晨 女 19 IS
Student
95003 王敏 女 18 MA
95004 张立 男 19 IS
(a)
例1 例2 例3 例4
An Introduction to Database System
选择(续)
课程号 课程名 先行课 学分
Cno Cname Cpno Ccredit
1 数据库 5 4
2 数学
2
Course
3 信息系统 1 4
4 操作系统 6 3
5 数据结构 7 4
6 数据处理 2
7 C 语言 6 4
选择(续)
学 课 程 成
号 号 绩
Sno Cno Grade
95001 1 92
SC
95001 2 85
95001 3 88
95002 2 90
95002 3 80
(c)
例 例
An Introduction to Database
7 System 9
选择(续)
[ 例 1] 查询信息系( IS 系)全体学生
95002 刘晨 女 19 IS
95004 张立 男 19 IS
结果:
Sno Sname Ssex Sage Sdept
95002 刘晨 女 19 IS
95003 王敏 女 18 MA
95004 张立 男 19 IS
An Introduction to Database System
2. 投影( Projection )
1 )投影运算符的含义
从 R 中选择出若干属性列组成新的关系
πA(R) = { t[A] | t R }
A : R 中的属性列
但投影之后不仅取消了原关系中的某些列,
而且还可能取消某些元组(避免重复行)
An Introduction to Database System
投影(续)
3) 举例
[ 例 3] 查询学生的姓名和所在系
即求 Student 关系上学生姓名和所在系两
个属性上的投影
πSname , Sdept(Student)
Sname Sdept
李勇 CS
刘晨 IS
王敏 MA
张立 IS
的元组
RAθB S = {tr ts | tr R∧ts S∧tr[A]θts[B] }
A 和 B :分别为 R 和 S 上度数相等且可比的属
性组
θ :比较运算符
连接运算从 R 和 S 的广义笛卡尔积
R×S 中选取( R 关系)在 A 属性组上的值
与( S 关系)在 B 属性组上值满足比较关
An Introduction to Database System
连接 ( 续 )
3 )两类常用连接运算
等值连接( equijoin )
什么是等值连接
θ 为“=”的连接运算称为等值连接
等值连接的含义
从关系 R 与 S 的广义笛卡尔积中选取 A 、 B
属性值相等的那些元组,即等值连接为:
R A=B
S ={ tr ts | tr R∧ts S∧tr[A] = ts[B] }
两个关系中进行比较的分量必须是相同的
属性组
在结果中把重复的属性列去掉
自然连接的含义
R 和 S 具有相同的属性组 B
R S = {tr ts | tr R∧ts S∧tr[B] =
ts[B] }
An Introduction to Database System
连接 ( 续 )
4 )一般的连接操作是从行的角度进行运算。
AθB
S
自然连接还需要取消重复列,所以是同时从
行和列的角度进行运算。
An Introduction to Database System
连接示例
B E
A B C b1 3
a1 b1 5 b2 7
a1 b2 6 b3 10
a2 b3 8
b3 2
a2 b4 12 b5 2
R S
R S
C<E
An Introduction to Database System
连接 ( 续 )
R S
C<E
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
An Introduction to Database System
等值连接示例
B E
A B C b1 3
a1 b1 5 b2 7
a1 b2 6 b3 10
a2 b3 8
b3 2
a2 b4 12 b5 2
R S
R S
R.B=S.B
An Introduction to Database System
连接 ( 续 )
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
An Introduction to Database System
连接 ( 续 )
自然连接 R S
A B C E
a1 b1 5 3
a1 b2 6 7
a2 b3 8 10
a2 b3 8 2
Yx : x 在 R 中的象集, x = tr[X]
An Introduction to Database System
除(续)
2 )除操作是同时从行和列角度进行运算
R
÷
S
只有 a1 的象集包含了 S 在 (B , C) 属性组上的投影
所以 R÷S ={a1}
An Introduction to Database System
5 .综合举例
学 课 程 成
号
Sno 号
Cno 绩
Grade
95001 1 92
SC 95001 2 85
95001 3 88
95002 2 90
95002 3 80
首先建立一个临时关系 K : Cno
1
3
然后求: πSno.Cno(SC)÷K
95001 李勇 男 20 CS
95002 刘晨 女 19 IS
Student
95003 王敏 女 18 MA
95004 张立 男 19 IS
(a)
3 信息系统 1 4
4 操作系统 6 3
5 数据结构 7 4
6 数据处理 2
7 C 语言 6 4
选择(续)
学 课 程 成
号 号 绩
Sno Cno Grade
95001 1 92
SC
95001 2 85
95001 3 88
95002 2 90
95002 3 80
(c)
An Introduction to Database System
综合举例 ( 续 )
[ 例 8] 查询选修了 2 号课程的学生的学号。
πSno ( σCno='2' ( SC )
)
={ 95001 , 95002 }
An Introduction to Database System
综合举例 ( 续 )
[ 例 9] 查询选修了一门其先行课为 5
号课程的课程的学生姓名。
95001 李勇 男 20 CS
95002 刘晨 女 19 IS
Student
95003 王敏 女 18 MA
95004 张立 男 19 IS
(a)
3 信息系统 1 4
4 操作系统 6 3
5 数据结构 7 4
6 数据处理 2
7 C 语言 6 4
选择(续)
学 课 程 成
号 号 绩
Sno Cno Grade
95001 1 92
SC
95001 2 85
95001 3 88
95002 2 90
95002 3 80
(c)
An Introduction to Database System
综合举例 ( 续 )
πSname(σCpno='5'(Course SC Student))
或
[ 例 10] 查询选修了全部课程的学生
号码和姓名 .
由 E.F.Codd 提出
INGRES 所用的 QUEL 语言是参照 ALPHA 语言研制的
语句
检索语句
GET
更新语句
PUT , HOLD , UPDATE , DELETE , DROP
(7) 带有多个关系的表达式的检索
(8) 用全称量词的检索
(9) 用两种量词的检索
(11) 集函数
95001 李勇 男 20 CS
95002 刘晨 女 19 IS Student
95003 王敏 女 18 MA
95004 张立 男 19 IS
(a)
3 信息系统 1 4
4 操作系统 6 3
5 数据结构 7 4
6 数据处理 2
7 PASCAL 语言 6 4
学 课 程 成
号 号 绩
Sno Cno Grade
95001 1 92
SC
95001 2 85
95001 3 88
95002 2 90
95002 3 80
(c)
An Introduction to Database System
( 1 )简单检索
GET 工作空间名 (表达式 1 )
[ 例 1] 查询所有被选修的课程号码。
GET W (SC.Cno)
[ 例 2] 查询所有学生的数据。
GET W (Student)
格式
GET 工作空间名(表达式 1 ) [ :操作条
件]
DOWN/UP 表达式 2
[ 例 4] 查询计算机科学系 (CS) 学生的
学号、年龄,结果按年龄降序排序。
GET W (Student.Sno , Student.Sage):
Student.Sdept=‘CS’ DOWN
Student.Sage
An Introduction to Database System
( 4 )带定额的检索
格式 : GET 工作空间名(定额)(表达式
1)
[ :操作条件 ] [DOWN/UP 表达式 2]
[ 例 5] 取出一个信息系学生的学号。
Student.Sdept='IS'
GET W (3)
(Student.Sno , Student.Sage):
Student.Sdept='IS'
DOWN Student.Sage
变量 Range Variable )
元组变量的用途
① 简化关系名:设一个较短名字的元组变量
来代替较长的关系名。
② 操作条件中使用量词时必须用元组变量。
定义元组变量
格式: RANGE 关系名 变量名
一个关系可以设多个元组变量
CX.Cno=SCX.Cno∧CX.Pcno='6')
An Introduction to Database System
( 7 )带有多个关系的表达式的检索
RANGE SC SCX
GET
W(Student.Sname , Course.Cname):
SCX (SCX.Grade≥90∧
SCX.Sno=Student.Sno∧
Course.Cno=SCX.Cno)
An Introduction to Database System
( 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')
RANGE Course CX
SC SCX
GET W (Student.Sname): CXSCX
(SCX.Sno=Student.Sno∧
SCX.Cno=CX.Cno)
检索操作 GET
GET 工作空间名 [ (定额) ] (表达式 1 )
[ :操作条件 ] [DOWN/UP 表达式 2]
插入操作
建立新元组 --PUT
修改操作
HOLD-- 修改 --UPDATE
删除操作
HOLD--DELETE An Introduction to Database System
2.5 关 系 演 算
操作命令 元组属性值或查询条件或操作命令
( 5 )用户在上面构造查询要求
Student Sno Sname Ssex Sage Sdept
P. T AO. IS
[ 例 1] 查询全体学生的全部数据。
Student Sno Sname Ssex Sage Sdept
P.9500 P. 李 P. P.20 P.CS
1 勇 男
P.
[ 例 2] 求信息系全体学生的姓名。
Student Sno Sname Ssex Sage Sdept
P. 李勇 IS
P.9500 >19
1
方法( 1 ):把两个条件写在同一行上
Student Sno Sname Ssex Sage Sdept
P.9500 >19 CS
1
[ 例 5] 查询既选修了 1 号课程又选修了 2 号
课程的学生的学号。
SC Sno Cno Grade
P.95001 1
P.95001 2
[ 例 6] 查询计算机科学系或者年龄大于 19
岁的学生的学号。
[ 例 7] 查询选修 1 号课程的学生姓名。
Student Sno Sname Ssex Sage Sdept
95001 P. 李
勇
SC Sno Cno Grade
95001 1
P. 李 男 DO AO
勇 (2). (1).