关系代数是一种抽象
的查询语言,是关系数据操纵语言的一种传统表达方式
,它是利用对关系的运算来表达查询的。
任何运算都是将一定的运算符作用于一定的运算对象上,得到预期的运算结果。
关系代数的运算对象是关系,运算结果亦为关系。
运算符:
元组
的集合行
而且涉及列
常见的关系运算符如下:
设关系RRR和关系SSS是相容的,ttt代表元组变量,现将各种运算分别介绍如下:
(1)并(Union)
举例:
RRR和SSS
R∪SR∪SR∪S
具体如下图所示:
(2)交( Intersection)
举例:
RRR和SSS
R∩SR∩SR∩S
具体如下图所示:
(3)差(Difference)
举例:
RRR和SSS
R−SR - SR−S
(4)广义笛卡尔积(Extended Cartesian Product)
严格地讲应该是广义的笛卡尔积
R×SR×SR×S
列:m+nm+nm+n列元组的集合
行:k1×k2k_1×k_2k1×k2个元组
具体如下图所示:
在讲解之前,我们先引入几个记号,这样有助于下面的理解,确实关系代数后半部分有点难理解。
(1)R,t∈R,t[Ai]R,t\in R,t[A_i]R,t∈R,t[Ai]
设关系模式为R(A1,A2,…,An)R(A_1,A_2,…,A_n)R(A1,A2,…,An),它的一个关系设为RRR,t∈Rt\in Rt∈R表示ttt是RRR的一个元组,t[Ai]t[A_i]t[Ai]则表示元组t中相应于属性AiA_iAi的一个分量。
(2)trts⏞\overbrace{t_rt_s}trts , RRR为nnn目关系,SSS为mmm目关系。
tr∈R,ts∈S,trts⏞t_r\in R,t_s\in S, \overbrace{t_r t_s}tr∈R,ts∈S,trts称为元组的连接。trts⏞\overbrace{t_r t_s}trts是一个n+mn + mn+m列的元组,前nnn个分量为RRR中的一个nnn元组,后mmm个分量为SSS中的一个mmm元组。
(3)象集ZxZ_xZx
给定一个关系R(X,Z)R(X,Z)R(X,Z),XXX和ZZZ为属性组。当t[X]=xt[X]=xt[X]=x时,xxx在RRR中的象集(Images Set)为:
Zx=t[Z]∣t∈R,t[X]=xZ_x={t[Z]|t \in R,t[X]=x}Zx=t[Z]∣t∈R,t[X]=x
它表示RRR中属性组XXX上值为xxx的诸元组在ZZZ上分量的集合。
举例如下:
上面抽象的例子可能并不是特别容易理解,那么我们就拿生活中的实际例子进行解释:
学生-课程-选修关系:
学生关系Student、课程关系Course和选修关系SC
在上面的关系表中,我们可以把SC表看作一个关系R,它的属性组为学号,课程号以及成绩,即R(Sno,Cno,Grade)R(Sno, Cno, Grade)R(Sno,Cno,Grade)。这时我们将SC表与上面那个例子对比可以看出,Sno为200215121的学号在关系R(SC表)中的象集为Sno200215121={1,2,3}Sno_{200215121}=\{1,2,3\}Sno200215121={1,2,3},以此类推,这样就比较容易理解一点。
F:选择条件,是一个逻辑表达式
以最上面的学生-课程-选修关系表举例说明更好理解:
[例1] 查询信息系(IS系)全体学生
σSdept=′IS′(Student)或σ5=′IS′(Student)σ_{Sdept} = 'IS' (Student) 或 σ_5 ='IS'(Student)σSdept=′IS′(Student)或σ5=′IS′(Student)
结果:
[例2] 查询年龄小于20岁的学生
σSage<20(Student)或σ4<20(Student)σ_{Sage< 20}(Student) 或 σ_{4 < 20}(Student)σSage<20(Student)或σ4<20(Student)
结果:
投影运算符的含义:
投影操作主要是从列的角度进行运算:
但投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)
举例说明一下:
[例3] 查询学生的姓名和所在系
即求Student关系上学生姓名和所在系两个属性上的投影
πSname,Sdept(Student)或π2,5(Student)π_{Sname,Sdept}(Student) 或 π_{2,5}(Student)πSname,Sdept(Student)或π2,5(Student)
结果:
[例4] 查询学生关系Student中都有哪些系
πSdept(Student)π_{Sdept}(Student)πSdept(Student)
结果:
由此可见,使用投影操作可以将关系表中的列单独拿出来组成新的关系表,这样方便我们可以更加清楚的查看自己想要的信息。
连接也称为θθθ连接
连接运算的含义:
从两个关系的笛卡尔积中选取属性间满足一定条件的元组
连接运算从R和SR和SR和S的广义笛卡尔积R×SR×SR×S中选取(RRR关系)在AAA属性组上的值与(SSS关系)在BBB属性组上值满足比较关系θθθ的元组
举例说明一下:
[例5]关系R和关系S 如下所示:
(1)等值连接(equijoin)
举例:
一般的连接操作是从行的角度进行运算。
自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。
给定关系R(X,Y)R (X,Y)R(X,Y)和S(Y,Z)S (Y,Z)S(Y,Z),其中X,Y,ZX,Y,ZX,Y,Z为属性组。RRR中的YYY与SSS中的YYY可以有不同的属性名,但必须出自相同的域集。RRR与SSS的除运算得到一个新的关系P(X)P(X)P(X),PPP是RRR中满足下列条件的元组在 XXX 属性列上的投影:
元组在XXX上分量值xxx的象集YxY_xYx包含SSS在YYY上投影的集合,记作:
关于象集的概念我们在前面已经提到了,在此直接举例子说明除:
[例6]设关系R、SR、SR、S分别为下图的(a)和(b),R÷SR÷SR÷S的结果为图©
通过上面的结果我们可以发现,关系RRR中的B、CB、CB、C属性组,和关系SSS中的B、CB、CB、C属性组的域都是相同的,R与SR与SR与S的除运算得到了一个新的关系,我们将它当做P(A)P(A)P(A),PPP是RRR中满足上述条件的元组在AAA属性列中的投影。
分析:
设关系R,SR,SR,S,分别为例6中的(a)和(b),R÷SR÷SR÷S的结果为图©,关系RRR中AAA可以取四个值{a1,a2,a3,a4},\{ a_1,a_2,a_3,a_4\},{a1,a2,a3,a4}, 其中:
SSS在(B,C)(B,C)(B,C)上的投影为{(b1,c2),(b2,c1),(b2,c3)}\{(b_1,c_2),(b_2,c_1),(b_2,c_3)\}{(b1,c2),(b2,c1),(b2,c3)}
显然只有a1a_1a1的象集包含了SSS在(B,C)(B,C)(B,C)属性组上的投影,所以R÷S={a1}R÷S=\{a1\}R÷S={a1}。
除操作是同时从行和列角度进行运算
📢博客主页:https://blog.csdn.net/m0_63007797?spm=1011.2415.3001.5343
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 心无旁骛~ 原创,首发于 CSDN博客🙉
📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨