560 likes | 735 Views
R S. 1. 传统的集合运算. 传统的集合运算是二目运算,包括并、交、差、广义笛卡尔积四种运算。 设关系 R 和关系 S 具有相同的目 n (即两个关系都有 n 个属性),且相应的属性取自同一个域。 1. 并( Union ) 关系 R 与关系 S 的并由属于 R 或属于 S 的元组组成。其结果关系仍为 n 目关系。记作: R∪S={t|t∈R∨t∈S}. R. S. R∪S. R S. 2. 差( Difference ) 关系 R 与关系 S 的差由属于 R 而不属于 S 的所有元组组成。其结果关系仍为 n 目关系。记作:
E N D
RS 1.传统的集合运算 传统的集合运算是二目运算,包括并、交、差、广义笛卡尔积四种运算。 设关系R和关系S具有相同的目n(即两个关系都有n个属性),且相应的属性取自同一个域。 1.并(Union) 关系R与关系S的并由属于R或属于S的元组组成。其结果关系仍为n目关系。记作: R∪S={t|t∈R∨t∈S} 1
R S R∪S 2
RS 2.差(Difference) 关系R与关系S的差由属于R而不属于S的所有元组组成。其结果关系仍为n目关系。记作: R-S={t|t∈R∧tS} 3
R S R-S S-R 4
RS ⒊交(Intersection Referential integrity) 关系R与关系S的交由既属于R又属于S的元组组成。其结果关系仍为n目关系。记作:R∩S={t|t∈R∧t∈S} 交运算可以通过差运算来重写: R∩S=R-(R-S) 5
R S R∩S 6
⒋广义笛卡尔积(Extended cartesian product) 两个分别为n目和m目的关系R和S的广义笛卡尔积是一个(n+m)列的元组的集合。元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有k1个元组,S有k2个元组,则关系R和关系S的广义笛卡尔积有k1×k2个元组。记作: • RS = { t|t=﹤tr,ts﹥∧trRtsS } 7
R xS A B C D E S R 1 1 1 1 2 2 2 2 10 19 20 10 10 10 20 10 a a b b a a b b C D E A B 10 10 20 10 a a b b 1 2 8
2.专门的关系运算 专门的关系运算包括选择、投影、连接、除等。 几个记号: 1.设关系模式为R(A1, A2,..., An)。它的一个关系设为R。t∈R表示t是R的一个元组。t[Ai]则表示元组t中相应于属性Ai的一个分量 。 2.若A={Ai1, Ai2,..., Aik},其中Ai1, Ai2, ..., Aik是A1, A2,..., An中的一部分,则A称为属性列或域列。フA则表示{A1, A2,..., An}中去掉{Ai1, Ai2,..., Aik}后剩余的属性组。t[A]=(t[Ai1], t[Ai2],..., t[Aik])表示元组t在属性列A上诸分量的集合。 9
3.R为n目关系,S为m目关系。 trR,tsS, tr ts称为元组的连接(Concatenation)。它是一个(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上分量的集合。 X Z Zx 张军同学所选修的全部课程 x=张军 10
更名运算(了解) • 定义 • 给一个关系表达式赋予名字 x(E) 返回表达式E的结果,并把名字x赋给E x(A1, A2 ,,An)(E) 返回表达式E的结果,并把名字x赋给E,同时将各属性更名为A1,A2,,An • 关系被看作一个最小的关系代数表达式,可以将更名运算施加到关系上,得到具有不同名字的同一关系。这在同一关系多次参与同一运算时很有帮助 11
1.选择(Selection) 选择又称为限制(Restriction)。它是在关系R中选择满足给定条件的诸元组,记作: σF(R) = {t|t∈R ∧ F(t)=‘真’}其中F表示选择条件,它是一个逻辑表达式,取逻辑值‘真’或‘假’。 选择运算实际上是从关系R中选取使逻辑表达式F为真的元组。 选择是从行的角度进行的运算。 12
R A<5(R) A<5 C=7(R) 13
例1 查询信息系(IS系)全体学生 σSdept=‘IS’(Student)或 σ5='IS'(Student) 例2 查询年龄小于20岁的元组 σSage<20(Student)或 σ4<20(Student) 补充:查询年龄不小于20岁的男生 AGE≥20 ∧ SEX=‘男’(S) 14
A B C a b c d e f c b c 2.投影(Projection) 关系R上的投影是从R中选择出若干属性列组成新的关系。记作: ΠA(R) = { t[A] | t∈R }其中A为R中的属性列。 投影操作是从列的角度进行的运算。 注意:投影结果中要去掉相同的行 R B , C(R) 15
例3 查询学生关系Student在学生姓名和所在系两个属性上的投影 ΠSname,Sdept(Student)或 Π2,5(Student) 例4 查询学生关系Student中都有哪些系,即查询学生关系Student在所在系属性上的投影 ΠSdept(Student) 补充: Sname, Sage(S) Cno( Sno=95001(SC)) 给出所有学生的姓名和年龄 找001号学生所选修的课程号 16
广义投影(了解) • 定义 • 在投影列表中使用算术表达式来对投影进行扩展 F1 , F2, … , Fn(E) F1 , F2 ,… , Fn是算术表达式 • 示例 • 求教工应缴纳的所得税 P#, SAL*5/100(PROF) 17
R S={trts | trR ∧tsS ∧ tr[A]θts[B]} AθB R S = r[A]S[B](R×S) AB 3.连接(Join) 连接也称为θ连接。它是从两个关系的笛卡尔积中选取属性间满足一定条件的元组。记作: 其中A和B分别为R和S上度数相等且可比的属性组。 θ是比较运算符。 连接运算从R和S的笛卡尔积R×S中选取(R关系)在A属性组上的值与(S关系)在B属性组上值满足比较关系θ的元组。 18
A=B R S={trts | trR ∧tsS ∧ tr[A]=ts[B]} 连接运算中有两种最为重要也最为常用的连接: 一种是等值连接(equi-join); 另一种是自然连接(Natural join) θ为“=”的连接运算称为等值连接。它是从关系R与S的笛卡尔积中选取A、B属性值相等的那些元组。 即等值连接为: 19
R S B < D A B C 1 2 3 4 5 6 7 8 9 R S 20
R S={trts | trR ∧tsS ∧ tr[B]=ts[B]} 自然连接(Natural join)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且要在结果中把重复的属性去掉。 即若R和S具有相同的属性组B,则自然连接可记作: 一般的连接操作是从行的角度进行运算。但自然连接还需要取消了重复列,所以是同时从行和列的角度进行运算。 当R与S无相同属性时,R S = R×S 21
r s A B C D B D E 1 2 4 1 2 a a b a b 1 3 1 2 3 a a a b b A B C D E 1 1 1 1 2 a a a a b r s 22
R S A B C 1 2 3 4 5 6 7 8 9 R S 23
4.除(Division) 给定关系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上投影的集合。记作: 其中, Yx为x在R中的象集,x=tr[X] 除操作是同时从行和列的角度进行运算。 R÷S={tr[X]|trR∧ΠY(S)Yx} RS=X(R)X(X(R)Y(S)R) 24
AB (R) CD (S) S AB (R) R AB (R) CD (S)-R R S= - = 25
例6设关系R, S分别为图2-9中的(a)和(b),求R÷S的结果 在关系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,c3),(b2,c1)} 显然只有a1的象集(B,C)a1包含S在(B,C)属性组上的投影,所以R÷S={a1} 26
选修了全部课程的学生 = 选修了全部课程并且成绩都相同的学生 = 27
习题 1.求选修了1号或2号课程的学生号 • 方案1: • ∏Sno(Cno = 1∨Cno = 2(SC)) • 方案2: • ∏ Sno( Cno = 1 (SC))∪∏ Sno( Cno = 2(SC)) 28
2.求选修了1号而没有选2号课程的学生号 ∏Sno(Cno = 1 (SC))-∏Sno(Cno = 2(SC)) 29
3.求同时选修了1号和2号课程的学生号 × ∏Sno(Cno =1 Cno = 2(SC)) √ ∏Sno(Cno =1 (SC))∩∏Sno(Cno = 2(SC)) √ ∏Sno,Cno(SC) Cno = 1Cno = 2 (C) × ∏Sno(SC Cno = 1Cno = 2 (C)) 30
4.求未选修1号课程的学生号 √ 方案1: ∏Sno(S)-∏Sno(Cno = 1 (SC)) 方案2: ∏Sno(Cno ≠ 1 (SC)) 哪一个正确? 31
5.求仅选修了1号课程的学生号 选修1号课程的学生-仅选1号课程之外的学生 ∏S#(C# = 1 (SC))-∏S#(SC-C# = 1 (SC)) 所有选课的学生-仅选1号课程之外的学生 ∏S#(SC)-∏S#(C# <> 1 (SC)) 32
S# C# SCORE P03 C02 88 P01 C03 92 S# S# S# P01 P01 P02 P02 P03 33
外连接(了解内容) • 外连接 • 为避免自然连接时因失配而发生的信息丢失,可以假定往参与连接的一方表中附加一个取值全为空值的行,它和参与连接的另一方表中的任何一个未匹配上的元组都能匹配,称之为外连接 外连接 = 自然连接 + 失配的元组 • 外连接的形式:左外连接、右外连接、全外连接 左外连接 = 自然连接 + 左侧表中失配的元组 右外连接 = 自然连接 + 右侧表中失配的元组 全外连接 = 自然连接 + 两侧表中失配的元组 34
P# PN SAL P01 赵明 800 P02 钱广 700 P03 孙立 600 P04 李三 500 C# C# CN P# P# PN SAL C# CN C01 C01 P01 物理 P01 赵明 800 C01 物理 C02 C02 P02 数学 P02 钱广 700 C02 数学 C02 C03 化学 P04 P04 李三 500 C02 数学 外连接 所有老师的信息 35
P# PN SAL P01 赵明 800 P02 钱广 700 P03 孙立 600 P04 李三 500 C# C# CN P# P# PN SAL C# CN C01 C01 P01 物理 P01 赵明 800 C01 物理 C02 C02 P02 数学 P02 钱广 700 C02 数学 C02 C03 化学 P04 P04 李三 500 C02 数学 外连接 所有课程的信息 36
P# PN SAL P01 赵明 800 P02 钱广 700 P03 孙立 600 P04 李三 500 C# C# CN P# P# PN SAL C# CN C01 C01 P01 物理 P01 赵明 800 C01 物理 C02 C02 P02 数学 P02 钱广 700 C02 数学 C02 C03 化学 P04 P04 李三 500 C02 数学 外连接 所有老师和课程的信息 37
R S F R S F 半连接 = A( ) A是R中所有属性的集合 38
赋值运算(了解) • 定义 • 为使查询表达简单、清晰,可以将一个复杂的关系代数表达式分成几个部分,每一部分都赋予一个临时关系变量,该变量可被看作关系而在后面的表达式中使用 临时关系变量关系代数表达式 • 赋值给临时关系变量只是一种结果的传递,而赋值给永久关系则意味着对数据库的修改 39
赋值运算 • 示例 RS = X(R) X(X(R) Y(S) R) 用赋值重写为: temp1 X(R) temp2 X(temp1 Y(S) R) result temp1 temp2 40
聚集函数(不讲) • 定义 • 求一组值的统计信息,返回单一值 • 使用聚集的集合可以是多重集,即一个值可以重复出现多次。如果想去除重复值,可以用连接符‘-’将‘distinct’附加在聚集函数名后,如sum-distinct • sum:求和 求全体教工的总工资 sumSAL((PROF)) 求001号学生的总成绩 sumSCORE(S# = 001 (SC)) 41
聚集函数 • avg:求平均 求001号同学选修课程的平均成绩。 avgSCORE(S# = 001(SC)) • count:计数 求001号同学选修的课程数。 countC#(S# = 001(SC)) 求任课老师的总数。 count-distinctP#(PC) 42
聚集函数 • max:求最大值 min:求最小值 求学生选修数学的最高成绩 maxSCORE(CN = 数学(C) SC)) • 分组 • 将一个元组集合分为若干个组,在每个分组上使用聚集函数。 属性下标 G 聚集函数属性下标(关系) 对此属性在每个分组上运用聚集函数 按此属性上的值对关系分组 43
聚集函数 • 分组运算G 的一般形式 G1 , G2 , ... , GnG F1 , A1 , F2 , A2 , … , Fm , Am(E) Gi是用于分组的属性, Fi是聚集函数, Ai是属性名。 G 将E分为若干组,满足: 1)同一组中所有元组在G1 , G2 , ... , Gn上的值相同。 2)不同组中元组在G1 , G2 , ... , Gn上的值不同。 • 示例 求每位学生的总成绩和平均成绩 S# G sumSCORE ,avgSCORE(SC) 44
数据库修改(不讲) • 删除 • 将满足条件的元组从关系中删除 r r E • 是对永久关系的赋值运算 • 例: • 删除001号老师所担任的课程 PC PC PC# = 001(PC) • 删除没有选课的学生 S S (∏S# (S)∏S#(SC)) S 关系 关系代数表达式 45
数据库修改 • 插入 • 插入一个指定的元组,或者插入一个查询结果 r r E • 示例:新加入一个老师 PC PC {(P07 ,“周正”, 750 , D08)} • 示例:加入计算机系学生选修“数学”的信息 SC SC ∏S# (S DN =计算机系(DEPT)) ∏C#(CN =数学(C)) 46
数据库修改 • 更新 • 利用广义投影改变元组的某些属性上的值 r F1 , F2, … , Fn (r) • 示例:给每位老师上调10%的工资 PC P# ,PN , SAL SAL* 1.1 ,D#(PC) • 示例:对工资超过800的老师征收5%所得税 PC P# ,PN , SAL SAL* 0.95 ,D#(SAL 800 (PC)) ∪P# ,PN , SAL ,D#(SAL 800 (PC)) 47
视图V1 视图V2 基本表B1 基本表B2 基本表B3 视图(不讲) • 定义 • 视图是命名的、从基本表中导出的虚表,它在物理上并不存在,存在的只是它的定义 • 视图中的数据是从基本表中导出的,每次对视图查询都要重新计算 create viewview_nameas <查询表达式> • 视图之上可以再定义视图 • 视图 Vs 临时关系变量 48
视图 • 视图的优点 • 个性化服务 • 简化了用户观点,使不同用户可以从不同角度观察同一数据 • 安全性 • “知必所需”,限制用户数据的访问范围 • 逻辑独立性 • 视图作为基本表与外模式之间的映象 49
视图 • 示例 • 给出老师所教授课程的信息 create viewp_course As ∏PN , CN(PROF PC C) • 给出李明老师所教授的课程名称 PN = 李明(p_course) 50