第二章 关系数据库 2.1 关系数据库的基本概念 2.2 关系模型及其描述 2.3 关系代数 2.4 关系演算 本章小结
2.1 关系数据库的基本概念 例: (1)域 定义2.1: 域是一组具有相同数据类型的值的集合。 1、关系及其性质 2.1 关系数据库的基本概念 例: 1、关系及其性质 (1)域 定义2.1: 域是一组具有相同数据类型的值的集合。 在关系中用域来表示属性的取值范围 域中所包含的值的个数称域的基数(用m表示) 例:D1={A , 2 , 3 , … , Q , K } M1= 13 D2={数据库原理,面向对象数据库技术} M2= 2
2.1 关系数据库的基本概念 例: 定义2.2: 给定一组域 D1,…,Dn (可有相同的域)。其笛卡尔积为: 2.1 关系数据库的基本概念 例: (2)笛卡尔积 定义2.2: 给定一组域 D1,…,Dn (可有相同的域)。其笛卡尔积为: D1×D2×…×Dn={(d1,d2,…,dn) | di∈Di,i=1,2…,n} di为分量 n元组 笛卡儿积也是一个集合 其中每一个元素(d1,d2,…,dn)叫作一个n元组(n-Tuple), 或简称为元组。元素中的每一个值di叫作一个分量(Component)。 若Di(i=1,2,…,n)为有限集,其基数(Cardinal number) 为mi(i=1,2,…,n),则D1×D2×…×Dn的基数为: m= ∏ mi i=1 n
2.1 关系数据库的基本概念 (3)关系 定义2.3 D1×D2×…×Dn的有意义的子集称为在域D1,D2,…,Dn上的关系, 2.1 关系数据库的基本概念 (3)关系 定义2.3 D1×D2×…×Dn的有意义的子集称为在域D1,D2,…,Dn上的关系, 记为 R(D1,D2,…,Dn) 。 其中:R为关系的名;n为关系的度(目);r∈R 表示 r 是 R 中的元组。 子集元素是关系中的元组; 关系中的元组个数是关系的基数; 同样可以把关系看作是一个二维表: 每一行对应一个元组; 表的每一列对应一个域,每个域起一个名字——称为属性;
2.1 关系数据库的基本概念 例:设 D1=男人集合(MAN) = { 王强、李东、张兵 } 2.1 关系数据库的基本概念 例 例:设 D1=男人集合(MAN) = { 王强、李东、张兵 } D2 =女人集合(WOMAN) = { 赵红、吴芳 } D3=儿童集合(CHILD) = { 王一、李一、李二 } (1)求上面三个集合的笛卡儿积 M W C 王强 赵红 王一 李一 李二 吴芳 李东 张兵 (2)构造一个家庭关系,可表示为: FAMILY(MAN,WOMAN,CHILD) 李二 吴芳 李东 李一 王一 赵红 王强 CHILD WOMAN MAN Family
2.1 关系数据库的基本概念 (4)关系中常用术语 候选码 主码 外码 全码 候选码(candidate key) 2.1 关系数据库的基本概念 候选码(candidate key) 值能唯一标识一个元组的属性组,且不含多余属性, 称该属性组为候选码。 主码(primary key) (4)关系中常用术语 候选码 主码 外码 全码 一个关系有多个候选码时, 选定其中的一个作为主码。 外码(foreign key) 关系R的某一属性组X不是R的码,但是是是其它某一关系的码,称X为R的外码。 全码(all key) 若关系R整个属性的集合是R的候选码,则该候选码为全码。
2.1 关系数据库的基本概念 9801 01 95 02 80 9802 88 92 9803 候选码 主码 Sno Cno Grade 2.1 关系数据库的基本概念 外码 候选码 参照关系 S(Sno, Cardno, Dno, Sname, Sage, …) D(Dno, Dname, Location) 主码 9801 01 95 02 80 9802 88 03 92 9803 Sno Cno Grade …… 主码 被参照关系 PUR(Cno,Pno,Sno) 全码
2.1 关系数据库的基本概念 (5)关系的性质 属性名 分量值 学号 姓名 年龄 元组 不允许 ① 每列的值为同一类型。 2.1 关系数据库的基本概念 (5)关系的性质 ① 每列的值为同一类型。 ② 每列具有不同的属性名(可同域) ③ 任意两元组不能完全相同。 ④ 行的次序可以互换。 ⑤ 列的次序可以互换。 ⑥ 分量值是原子的。 属性名 分量值 学号 姓名 年龄 元组 关系的类型 : 基本关系(基表) 查询表 视图表 不允许 、网虫 +5
2.1 关系数据库的基本概念 2、关系模式与关系数据库 属性间的依赖关系集 定义2.4: 域名集 2.1 关系数据库的基本概念 属性间的依赖关系集 2、关系模式与关系数据库 定义2.4: 关系的描述称关系模式,其表示为:R(U,D,Dom,F) 域名集 属性名集 属性向域的映像集 关系模式可简记为关系的属性名表。 R(U)=R(A1 ,A2,A3,….An) 例:学生(学号,姓名,总成绩) 关系模式就是关系的框架(表框架) 它是对关系结构的描述
2.1 关系数据库的基本概念 关系数据库 在关系模型中,实体以及实体间的联系都是用关系来表示。在一个给定的现实世界领域中,相应于所有实体及实体之间的联系的关系的集合构成一个关系数据库。 关系数据库也有型和值之分。关系数据库的型也称为关系数据库模式,是对关系数据库的描述,是关系模式的集合。关系数据库的值也称为关系数据库,是关系的集合。关系数据库模式与关系数据库通常统称为关系数据库。
2.2 关系模型及其描述 1.关系模型的特点及组成 关系模型的特点: 结构简单,表达力强 语言的一体化 非过程化的操作 坚实的数学基础 2.2 关系模型及其描述 1.关系模型的特点及组成 关系模型的特点: 结构简单,表达力强 语言的一体化 非过程化的操作 坚实的数学基础 操作效率较低 关系模型的组成: 关系数据结构 关系数据操作 关系完整性约束 2. 关系模型的数据操作 (1)数据查询 (2)数据插入 (3)数据删除 (4)数据修改
2.2 关系模型及其描述 3. 关系的完整性 三类完整性约束: 说明: (1) 实体完整性 实体完整性 不变性 参照完整性 2.2 关系模型及其描述 3. 关系的完整性 三类完整性约束: 实体完整性 参照完整性 用户定义的完整性 不变性 由关系系统自动支持 数据完整性控制过程? 是应用领域需要遵循的约束条件 说明: ① 实体完整性规则是对基本关系的约束和限定。 ② 实体具有唯一性标识—主码。 ③ 主码属性不能取空值。 (1) 实体完整性 规则2.1 实体完整性规则 : 若属性A是基本关系R的主码属性,则属性A不能取空值。
2.2 关系模型及其描述 (2) 参照完整性 引用关系: 关系中的某属性的值需要参照另一关系的属性来取值。 2.2 关系模型及其描述 (2) 参照完整性 引用关系: 关系中的某属性的值需要参照另一关系的属性来取值。 例1:学生(学号,姓名,性别,专业号,年龄) 专业(专业号,专业名) 引用 例2: 学生(学号,姓名,性别,专业号,年龄,班长) 引用
2.2 关系模型及其描述 定义2.5 : 设:基本关系R、S(可为同一关系)。 若F是R的一个(组)属性,但不是R的码。 2.2 关系模型及其描述 定义2.5 : 设:基本关系R、S(可为同一关系)。 若F是R的一个(组)属性,但不是R的码。 如果F与S的主码 K相对应,则称F是R的外码。 并称R为参照关系,S为被参照关系(目标关系)。 说明:S的主码K和R的外码F必须定义在同一个(或一组)域上。 外码 参照关系 例1:学生(学号,姓名,性别,专业号,年龄) 专业(专业号,专业名) 引用 被参照关系 参照完整性规则定义了外码与主码之间的引用规则。
2.2 关系模型及其描述 规则2.2 参照完整性规则 若属性(组) F是R的外码它与S的主码K相对应,则对于R中每个元组在F上的值必须为: 2.2 关系模型及其描述 规则2.2 参照完整性规则 若属性(组) F是R的外码它与S的主码K相对应,则对于R中每个元组在F上的值必须为: 或者取空值(F的每个属性值均为空值); 或者等于S中某个元组的主码值。 例1:学生(学号,姓名,性别,专业号,年龄) 关系中每个元组的专业号取值: ① 空值(未给该学生分配专业); ② 非空值(是专业关系中某个元组的专业号值)。
2.2 关系模型及其描述 例2:职工EMP(EMP#,ENAME,JOB,DEPT#) 部门DEPT(DEPT#,DNAME,LOC) 2.2 关系模型及其描述 例2:职工EMP(EMP#,ENAME,JOB,DEPT#) 部门DEPT(DEPT#,DNAME,LOC) 则:EMP中的DEPT#为空或为DEPT中的DEPT#的值 (3) 用户定义的完整性 用户自定义完整性是针对某一具体数据的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求,由应用环境决定。 例: 属性的取值范围 属性的非空限制
2.3 关系代数 关系数据语言的分类 (1)关系代数语言 用对关系的运算来表达查询要求方式的语言。 (2)关系演算语言 用谓词来表达查询要求方式的语言。 ①元组关系演算语言 ②域关系演算语言 (3)结构化查询语言 (SQL)
2.3 关系代数 关系代数 用关系运算来表达查询,以ISBL为代表 关系演算:元组演算、域演算 元组演算 用谓词公式来表达查询元组演算(以行为变量),以ALPHA为代表 域演算 域演算(以列为变量),以QBE为代表 关系数据库标准语言SQL 具有关系代数和关系演算双重特点
2.3 关系代数 关系查询语言 关系代数语言:查询操作是以集合操作作为基础的语言 关系演算语言:查询操作是以谓词演算作为基础的语言 关系查询语言是一种比Pascal、C等程序设计语言更高级的语言。 Pascal、C、关系代数语言属于过程性语言,在编程时必须给出获得结果的操作步骤。 而关系演算语言属于非过程性语言,编程时只需要指出需要什么信息,不必给出具体的操作步骤。 干什么? 怎么干? 干什么?
2.3 关系代数 1.集合运算 分类: 集合运算(并、交、差;广义笛卡尔积) 设:t 为元组变量;R、S为同类关系(同元、相应属性同域); 关系代数是一种抽象的查询语言。它以关系为运算对象, 通过对关系进行“组合”或“分割”,得到所需的数据集合—关系。 分类: 集合运算(并、交、差;广义笛卡尔积) 关系运算 (投影、选择、连接和除运算) 设: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)}
2.3 关系代数 关系运算示例 R 2 A 1 3 a 3 c b 2 d c 2 d e 5 f g 6 f R 1 A 2 3 b 3 b c 2 d d 3 b 关系运算示例 R 1 ∪ 2 A 3 b 2 d b 3 b c 2 d d 3 b a 3 c e 5 f g 6 f R 1 ∩ 2 A 3 b 2 d c 2 d R 1 - 2 A 3 b 3 b d 3 b
2.3 关系代数 R×S={tr ts|(tr∈R)∧(ts ∈ S)} (4)广义笛卡尔积: R、S可为不同类关系,则结果为不同类关系: n目关系 连接为 m+n目关系 m目关系 S A 2 3 2 d 3 b R 1 b 2 d b 3 b c 2 d d 3 b
2.3 关系代数 R × S . A 1 2 3 b 2 d 2 d b 2 d 3 b b 3 b 2 d b 3 b 3 b c 2 c 2 d 3 b d 3 b 2 d d 3 b 3 b 元组的前n列是关系R的一个元组 后m列是关系S的一个元组
2.3 关系代数 学号 姓名 年龄 t 记号 设t为R的元组变量,设:R(A1,A2,…An) = R(U) 学号 姓名 年龄 记号 设t为R的元组变量,设:R(A1,A2,…An) = R(U) t[Ai] (Ai为属性): R在属性集Ai上的所有值。 t[A] (A为属性集),R在属性集A上的所有值。 例:t[学号 ]--R中学号上的值 t [学号,姓名] t
2.3 关系代数 √ σ F(R)={t|(t∈R)∧F( t )=true}} √ √ √ σ[2]>5 σ 2.专门的关系运算 A 1 2 3 a 3 f b 2 d c 2 d e 6 f g 6 f 2.专门的关系运算 (1)选择 是行上的选择,产生同类关系。 σ F(R)={t|(t∈R)∧F( t )=true}} 含义:由R中满足F条件的元组组成。 其中:F由属性名(值)、比较符、逻辑运算符组成。 例: σ A2>5 ∨A3 ≠“f”(R) 或: 选择运算是从行的角度进行的运算 √ √ √ √ σ[2]>5 ∨ [3] ≠ “f” (R) A 1 2 3 b 2 d c 2 d e 6 f g 6 f σ [2]>5 ∨ [3] ≠ “f” (R) σ
2.3 关系代数 ΠA(R)={t[A] |(t∈R) } (R) (2)投影运算 例: ΠA3,A2(R) Π 是列上的选择,产生不同类关系。 ΠA(R)={t[A] |(t∈R) } 含义:R中取属性名表A中指定 的列,消除重复元组。 例: ΠA3,A2(R) R A 1 2 3 a 3 f b 2 d c 2 d e 6 f g 6 f 3, 2 Π A (R) A 3 2 f 3 d 2 f 6
2.3 关系代数 投影操作主要是从列的角度进行运算 π 9801 1 95 2 90 9802 88 3 92 9803 Sno Cno Grade 80 …… SC表 用关系代数表示查询: 例:查选2号课程的学生记录。 例: 成绩在90分以上的学生号。 √ 解: σCno=‘2’(SC) √ 解: ΠSno(σGrade≥90(SC))
2.3 关系代数 含义: (3)连接运算: 它从两个关系的笛卡尔积中选取属性间满足一定条件的元组。 ① 一般连接 它从两个关系的笛卡尔积中选取属性间满足一定条件的元组。 R ⋈ S={tr ts|(tr∈R)∧(ts∈S)∧tr[A] θ ts[B]} A θ B ① ② 比较运算符 含义: 从R X S中选取R关系在A属性组上的值与S关系在B属性组上值满足θ关系的元组。
2.3 关系代数 p73例 AθB ② 等值连接:θ为“=”的连接。 什么是等值连接 θ为“=”的连接运算称为等值连接 等值连接的含义 从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组,即等值连接为: R S = { | tr R∧ts S∧tr[A] = ts[B] } tr ts A=B AθB R S
2.3 关系代数 ③ 自然连接 设R、S有同名属性 Bi ( i=1,2….k) R ∞ S= {tr ts|(tr∈R)∧(ts∈S)∧tr[B] = ts[B]} 其中B是R和S的公共属性,并且在形成的新关系中要去掉重复的属性。 p74例
2.3 关系代数——连接举例 R S B E b1 3 b2 7 b3 10 2 b5 A B C a1 b1 5 b2 6 a2 b3 8 12 R S
2.3 关系代数——连接举例 A R.B C S.B E a1 b1 5 b2 7 b3 10 6 a2 8 C<E R S
2.3 关系代数——连接举例 等值连接 R S A R.B C S.B E a1 b1 5 3 b2 6 7 a2 b3 8 10 2 R.B=S.B 等值连接 R S A R.B C S.B E a1 b1 5 3 b2 6 7 a2 b3 8 10 2
2.3 关系代数——连接举例 自然连接 R S A B C E a1 b1 5 3 b2 6 7 a2 b3 8 10 2
2.3 关系代数——连接举例 注意 等值连接与自然连接的区别: (1)自然连接一定是等值连接,但等值连接不一定是自然连接。因为自然连接要求相等的分量必须是公共属性,而等值连接相等的分量不一定是公共属性。 (2)等值连接不把重复的属性去掉,而自然连接要把重复属性去掉。 若R、S无公共属性,R S=?
Zx={t[Z]|tRt[X]=x} 2.3 关系代数 (4)除运算 象集(Image Set) 关系R(X , Z), X, Z是属性组,x是X上的取值,定义x在R中的象集为 Zx={t[Z]|tRt[X]=x} 从R中选出在X上取值为x的元组,去掉X上的分量,只留Z上的分量 X Z Zx 张军同学所选修的全部课程 x=张军 姓名 课程 张军 物理 王红 数学 课程 数学 物理
2.3 关系代数 除运算 { x | x=r[SN] rSC CxC } 如何得到选修了全部课程的学生? 除运算 做法:逐个考虑选课关系SC中的元组r,求r在姓名SN上的分量x,再求x在选课关系中的象集课程Cx,若Cx包含了所有的课程C,则x是满足条件的一个元组 x同学所选修 的全部课程 选修全部课 程的学生 全部课程 { x | x=r[SN] rSC CxC } 除定义R(X,Y) S(Y) = {tr[x] |trRY(S)Yx} 其中Yx为x在R中的象集,x=tr[x]
= = = 2.3 关系代数 所有学生选 修全部课程 没有选修全部 课程的学生 选修了全部 课程的学生 物理 数学 课程 王红 张军 姓名 没有选修全部 课程的学生 = 数学 张军 王红 物理 课程 姓名 选修了全部 课程的学生 姓名 王红 张军 =
∏S#,C#(SC) C# = 001 C# = 002 (C) 2.3 关系代数 示例 求同时选修了001和002号课程的学生号 方案1: ∏S#,C#(SC) C# = 001 C# = 002 (C) 方案2: ∏S#(SC C# = 001 C# = 002 (C)) 哪一个正确?
2.3 关系代数 R S AB (R) AB (R) CD (S) AB (R) CD (S)-R R S= - = e f A B a b c e d A B C D a b c d e f C D c d e f A B a b c e d A B a b e d AB (R) CD (S)-R A B b c R S= A B C D b c d - =
2.3 关系代数(综合举例) 学生-课程数据库: S(sno,sname,sex,age,dept) C(cno,cname, credit , pcno) SC(sno,cno,grade) 目标 A 条件 F 来源 R
2.3 关系代数(综合举例) Student 学 号 Sno 姓 名 Sname 性 别 sex 年 龄 age 所 在 系 dept 学 号 Sno 姓 名 Sname 性 别 sex 年 龄 age 所 在 系 dept 95001 李勇 男 20 CS 95002 刘晨 女 19 IS 95003 王敏 18 MA 95004 张立
2.3 关系代数(综合举例) Course 课程号 课程名 先行课 学分 Cno Cname pcno 1 数据库 5 4 2 数学 3 credit 1 数据库 5 4 2 数学 3 信息系统 操作系统 6 数据结构 7 数据处理 PASCAL语言
2.3 关系代数(综合举例) SC 学 号 课 程 号 成 绩 Sno Cno Grade 95001 1 92 2 85 3 88 学 号 课 程 号 成 绩 Sno Cno Grade 95001 1 92 2 85 3 88 95002 90 80
2.3 关系代数(综合举例) 例1:查不选002号课程的学生姓名与年龄。 ? Cno≠’002’ ? Πsname,age(S)- Πsname,age(S ∞σcno=‘002’ (SC)) 例2:查询至少选修了两门课程的学生学号。 Πsno(σ[1]=[4]∧[2]≠[5](SC×SC))
2.3 关系代数(综合举例) Πsno,sname( S) ∞ 例3:查所选课程包含了学生210101所选全部课程的学生号和姓名。 目标A1、A2 ① ② Πsno,sname( S) ∞ (Πsno,cno(SC) ÷ Πcno (σsno=210101 (SC))) 例4:查询选修了全部课程的学生学号与姓名。 Πsno,sname( S) ∞ (Πsno,cno(SC) ÷ Πcno ( (C)))
2.3 关系代数(综合举例) [例5] 查询信息系(IS系)全体学生 σdept = 'IS' (Student) 结果: Sno Sname sex age dept 95002 刘晨 女 19 IS 95004 张立 男
2.3 关系代数(综合举例) σage < 20(Student) [例6] 查询年龄小于20岁的学生 [例6] 查询年龄小于20岁的学生 σage < 20(Student) 或 σ4 < 20(Student) 结果: Sno Sname sex age dept 95002 刘晨 女 19 IS 95003 王敏 18 MA 95004 张立 男
2.3 关系代数(综合举例) 即求Student关系上学生姓名和所在系两个属性上的投影 Sname dept 李勇 刘晨 IS 王敏 MA [例7] 查询学生的姓名和所在系 即求Student关系上学生姓名和所在系两个属性上的投影 πSname,dept(Student) 或 π2,5(Student) 结果: Sname dept 李勇 CS 刘晨 IS 王敏 MA 张立
2.3 关系代数(综合举例) 以学生-课程数据库为例 (P.59) [例8] 查询至少选修1号课程和3号课程的学生号码 1 3 Cno [例8] 查询至少选修1号课程和3号课程的学生号码 首先建立一个临时关系K: 然后求:πSno.Cno(SC)÷K Cno 1 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 2 3 95002
2.3 关系代数(综合举例) πSno(σCno='2'(SC))={ 95001,95002} [例 9] 查询选修了2号课程的学生的学号。 πSno(σCno='2'(SC))={ 95001,95002} [例10] 查询选修了全部课程的学生号码和姓名。 πSno,Cno(SC)÷πCno(Course) πSno,Sname(Student)
2.3 关系代数(综合举例) πSname(σCpno='5'(Course SC Student)) 或 [例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))
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后剩余的属性。
2.3 关系代数 3.除 R÷S的计算过程如下: ① T = ΠX(R) 设关系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 例
2.3 关系代数 ΠA1 , A2 , …, An (R) 2.关系的元组选择 σF (R) 3.两个关系的归并 R1×R2 5种基本运算的作用 1.关系的属性指定 ΠA1 , A2 , …, An (R) 2.关系的元组选择 σF (R) 3.两个关系的归并 R1×R2 4.关系中元组的插入 R∪R ' 5.关系中元组的删除 R-R'
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)) (删除)
2.3 关系代数 (3) 外连接 为避免自然连接时因失配而发生的信息丢失,可以假定往参与连接的一方表中附加一个取值全为空值的行,它和参与连接的另一方表中的任何一个未匹配上的元组都能匹配,称之为外连接 外连接 = 自然连接 + 失配的元组 外连接的形式:左外连接、右外连接、全外连接 左外连接 = 自然连接 + 左侧表中失配的元组 右外连接 = 自然连接 + 右侧表中失配的元组 全外连接 = 自然连接 + 两侧表中失配的元组
2.3 关系代数 (4)半连接 R和S的自然连接只在关系R或关系S的属性集上的投影, 称为半连接。 R和S的右外连接记为R ⋉ S。 R和S的半连接记为S ⋊ R。 (5)聚集 根据关系中的一组值经统计、计算得到一个值作为结果。 常用聚集函数:max、min、avg、sum、count。 形式:G 聚集函数名(属性)(关系)
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的元组组成,且元组在新增加的属性填上空值。
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.成绩
2.4 关系演算 命题公式 关系演算:以谓词演算为基础表示的关系运算。 关系演算分类 元组关系演算 域关系演算 1. 元组关系演算 2.4 关系演算 关系演算:以谓词演算为基础表示的关系运算。 关系演算分类 元组关系演算 域关系演算 1. 元组关系演算 用 {t|ф(t)} 表示关系。 命题公式 元组变量 表示所有使得ф为真的元组组成的集合。
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个分量之间满足θ关系。
2.4 关系演算-元组演算 低 高 ① 每个原子公式是公式。 (2) 公式的递归定义 ① 每个原子公式是公式。 ② 若ф1和ф2是公式,则ф1、ф1∨ф2、ф1∧ф2、ф1-> ф2也是公式。 ③ 若ф是公式,则(t)(ф)、(t)(ф)也是公式。 ④ 有限次使用上述3条规则得到的公式都是元组关系演算表达式。 公式中各种运算符的优先级: 算术运算符、量词()、逻辑运算符( ∧∨->) 高 低 括号优先
2.4 关系演算<->关系代数 关系演算表达式 关系代数表达式 ● 用关系演算表达式表达五种基本运算: 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] ) } πi1, i2, … , ik (R) ={ t(k) | ( u) (R(u) ∧t[1]=u[i1] ∧… ∧ t[k]=u[ik] )} σF (R) ={ t | R (t) ∧ F }
2.4 关系演算<->关系代数 例1 查询信息系(IS)全体学生 例2 查询年龄小于20岁的学生 关系演算表达式 关系代数表达式 σF (R) ={ t | R (t) ∧ F } 例1 查询信息系(IS)全体学生 SIS={ t | Student(t) ∧ t[5]=‘IS’ } 例2 查询年龄小于20岁的学生 S20={ t | Student(t) ∧ t[4]<20 }
2.4 关系演算<->关系代数 例3 查询学生的姓名和所在系 关系演算表达式 关系代数表达式 πi1, i2, … , ik (R) ={ t(k) | ( u) (R(u) ∧t[1]=u[i1] ∧… ∧ t[k]=u[ik] )} 例3 查询学生的姓名和所在系 S1={ t(2) | ( u) (Student(u) ∧t[1]=u[2] ∧t[2]=u[5])}
2.4 关系演算-元组演算 R1={t|S(t)∧t[1]>2} R2={t|R(t)∧ S(t)} 例1:设有关系R和S,请写出下列元组演算表达式的结果。 R S A B C 1 2 3 4 5 6 7 8 9 A B C 1 2 3 4 6 5 9 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])}
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])}
2.4 关系演算-元组演算 R2 R1 R4 R3 A B C 3 4 6 9 A B C 4 5 6 7 8 9 A B C 1 2 3
2.4 关系演算-元组演算 R5: R5: t[1]=u[2] ∧ t[2]=v[3] ∧ t[3]=u[1]) u[1] u[2] 6 1 2 3 7 8 9 u[1] v[2] 1 * 2 4 7 6 R5: t[1]=u[2] ∧ t[2]=v[3] ∧ t[3]=u[1])
2.4 关系演算-域演算 2.域关系演算 以域变量作为谓词变元的基本对象。 用{t1,t2,…,tk|ф(t1,t2,…,tk)}表示关系。 (1)域演算中的原子公式 ① R(t1,t2,…,tk) 表示:由分量t1,t2,…,tk组成的元组属于R。 ② tiθuj 表示:元组变量t的第i个分量与元组u的第j个分量间满足θ关系。 ③ tiθC 或 Cθti 表示:元组变量t的第i个分量与常量C间满足θ关系。 (2)公式的递归定义 与元组演算定义类似。
2.4 关系演算-域演算 例:设有关系R、S、W,试写出下列域演算表达式的结果。 R S W A B C 1 2 3 4 5 6 7 8 9 A B C 1 2 3 4 6 5 9 D E 7 5 4 8 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)}
2.4 关系演算-域演算 R1: R2: R3: xyz A B C 1 2 3 4 5 6 7 8 9 A B C 4 5 6 z x u v 4 5 6 7 8 9 u= R.c 3* 6 9 v= W.E 5 8
2.4 关系演算 注意 例:{t|R(t)} 3.关系演算的安全性 关系代数运算总是安全的。关系演算则可能出现无限关系和无穷验证问题, 这是一个无限关系。 安全运算 不产生无限关系和无穷验证的运算。 安全表达式 安全运算的表达式。 安全限制 安全运算所采取的措施。 要使关系演算是安全的,只要定义一个安全约束有限集合,该有限集是表达式中涉及到的关系中的值的集合。经过安全限制后的表达式其运算是安全的。 关系代数和关系演算所依据的基础理论是相同的,故可进行相互转换。已证明,关系代数、安全的元组演算、安全的域演算在关系的表达能力上是等价的。
2.4 域关系演算语言QBE 一种典型的域关系演算语言 QBE:Query By Example 基于屏幕表格的查询语言 由M.M.Zloof提出 1978年在IBM370上得以实现 QBE也指此关系数据库管理系统 QBE:Query By Example 基于屏幕表格的查询语言 查询要求:以填写表格的方式构造查询 用示例元素(域变量)来表示查询结果可能的情况 查询结果:以表格形式显示
QBE操作框架 关系名 属性名 操作命令 元组属性值或查询条件或操作命令
QBE操作框架——检索操作 (3)用户在最左边一栏输入要查询的关系名,例如 Student; (1)用户提出要求; (2)屏幕显示空白表格; (3)用户在最左边一栏输入要查询的关系名,例如 Student; Student
QBE操作框架——检索操作 (4)系统显示该关系的属性名 (5)用户在上面构造查询要求 Student Sno Sname Ssex Sage Sdept Student Sno Sname Ssex Sage Sdept P. T AO. C
QBE操作框架——检索操作 (6)屏幕显示查询结果 Student Sno Sname Ssex Sage Sdept 李勇 张立 C
QBE操作框架——构造查询的几个要素 示例元素 即域变量 一定要加下划线 示例元素是这个域中可能的一个值,它不必是查询结果中的元素 示例元素 即域变量 一定要加下划线 示例元素是这个域中可能的一个值,它不必是查询结果中的元素 打印操作符P. 指定查询结果所含属性列 查询条件 不用加下划线 可使用比较运算符>,≥,<,≤,=和≠ 其中=可以省略 排序要求
QBE简单查询 [例1] 查询全体学生的全部数据。 Student Sno Sname Ssex Sage Sdept P.95001 [例1] 查询全体学生的全部数据。 Student Sno Sname Ssex Sage Sdept P.95001 P. 李勇 P.男 P.20 P.CS
QBE简单查询 显示全部数据也可以简单地把P.操作符作用在关系名上。 P. Student Sno Sname Ssex Sage Sdept P.
QBE条件查询 (1) 简单条件 [例2] 求信息系全体学生的姓名。 Student Sno Sname Ssex Sage Sdept (1) 简单条件 [例2] 求信息系全体学生的姓名。 Student Sno Sname Ssex Sage Sdept P. 李勇 IS
QBE条件查询(续) [例3] 求年龄大于19岁的学生的学号。 Student Sno Sname Ssex Sage Sdept [例3] 求年龄大于19岁的学生的学号。 Student Sno Sname Ssex Sage Sdept P.95001 >19
QBE条件查询(与条件) [例4] 求计算机科学系年龄大于19岁的学生的学号。 方法(1):把两个条件写在同一行上 Student Sno [例4] 求计算机科学系年龄大于19岁的学生的学号。 方法(1):把两个条件写在同一行上 Student Sno Sname Ssex Sage Sdept P.95001 >19 CS
QBE条件查询(续) 方法(2):把两个条件写在不同行上,但使 用相同的示例元素值 Student Sno Sname Ssex Sage Sdept P.95001 >19 CS
QBE条件查询(续) [例5] 查询既选修了1号课程又选修了2号课程的学生的学号。 SC Sno Cno Grade P.95001 1 2
QBE条件查询(续) [例6] 查询计算机科学系或者年龄大于19岁的学生的学号。 Student Sno Sname Ssex Sage [例6] 查询计算机科学系或者年龄大于19岁的学生的学号。 Student Sno Sname Ssex Sage Sdept P.95001 P.95002 >19 CS
QBE多表连接 Cno [例7] 查询选修1号课程的学生姓名。 SC Sno Grade 95001 1 Student Sname [例7] 查询选修1号课程的学生姓名。 SC Sno Cno Grade 95001 1 Student Sname Ssex Sage Sdept P.李勇 注意:示例元素Sno是连接属性,其值在两个表中要相同。
QBE条件查询(非条件) Cno [例8] 查询未选修1号课程的学生姓名 [例8] 查询未选修1号课程的学生姓名 思路:显示学号为95001的学生名字,而该学生选修1号课程的情况为假 SC Sno Cno Grade 95001 1 Student Sname Ssex Sage Sdept P.李勇
QBE条件查询(续) Cno [例9] 查询有两个人以上选修的课程号 SC Sno Grade 95001 .95001 P.1 1 [例9] 查询有两个人以上选修的课程号 思路:查询这样的课程1,它不仅被95001选修 而且也被另一个学生(95001)选修了 SC Sno Cno Grade 95001 .95001 P.1 1
QBE—集函数 常用集函数: 函 数 名 功 能 CNT 对元组计数 SUM 求 总 和 AVG 求平均值 MAX 求最大值 MIN 功 能 CNT 对元组计数 SUM 求 总 和 AVG 求平均值 MAX 求最大值 MIN 求最小值
QBE—集函数 [例10] 查询信息系学生的平均年龄。 Student Sno Sname Ssex Sage Sdept [例10] 查询信息系学生的平均年龄。 Student Sno Sname Ssex Sage Sdept P.AVG.ALL. IS
QBE查询结果排序(续) [例11] 查全体男生的姓名,要求查询结果按所在系升序排序,对相同系的学生按年龄降序排序。 Student Sno [例11] 查全体男生的姓名,要求查询结果按所在系升序排序,对相同系的学生按年龄降序排序。 Student Sno Sname Ssex Sage Sdept P.李勇 男 DO(2). AO(1).
QBE修改操作 [例12] 把95001学生的年龄改为18岁。 Sage 方法(1) :将操作符“U.”放在值上 Student Sno [例12] 把95001学生的年龄改为18岁。 方法(1) :将操作符“U.”放在值上 Student Sno Sname Ssex Sage Sdept 95001 U. 18
QBE修改操作(续) Sage 方法(2): 将操作符“U.”放在关系上 Student Sno Sname Ssex Sdept U. 修改后的新值。 由于主码是不能修改的,所以系统不会混淆要修改 的属性。 Student Sno Sname Ssex Sage Sdept U. 95001 18
QBE修改操作(续) Sdept [例13]将计算机系所有学生的年龄都改为18岁 Student Sno Sname Ssex Sage 95008 U.18 CS
QBE修改操作(续) Sdept [例14] 把95001学生的年龄增加1岁 Student Sno Sname Ssex Sage U. [例14] 把95001学生的年龄增加1岁 分两行分别表示改前和改后的示例元素 必须将操作符“U.”放在关系上 Student Sno Sname Ssex Sage Sdept U. 95001 17 17+1
QBE修改操作(续) [例15] 将计算机系所有学生的年龄都增加1岁 Sdept Student Sno Sname Ssex Sage [例15] 将计算机系所有学生的年龄都增加1岁 Student Sno Sname Ssex Sage Sdept U. 95008 18 18+1 CS
QBE插入操作 I. Sage [例16] 把信息系女生95701,姓名张三,年龄17岁存入数据库中。 Student Sno Sname [例16] 把信息系女生95701,姓名张三,年龄17岁存入数据库中。 Student Sno Sname Ssex Sage Sdept I. 95701 张三 女 17 IS
QBE 删除操作 D. Sage Student Sno Sname Ssex Sdept 95089 SC Sno Cno Grade [例17] 删除学生95089 为保证参照完整性,删除95089学生前,先删除95089学 生选修的全部课程 Student Sno Sname Ssex Sage Sdept D. 95089 SC Sno Cno Grade D. 95089