关系代数
基本运算:
选择运算:选出满足给定谓词的元组,用“σ”符号表示,而将谓词写作σ的下标,参数关系在 σ 后的括号中。
例,选择关系instructor中属于“物理(Physics)”系的那些元组,可以用关系代数:σdept_name="Physics"(instructor)来进行选择。
通常,我们允许在选择谓词中进行比较,使用的是, =,≠,<,>。我们也可以使用连词and(Λ), or(ν), 和not(¬)将多个谓词合并为一个较大的谓词。
投影运算:列举所有我们希望在结果中出现的属性,用"π"符号表示,而将我们想要的属性作为下标,作为参数的关系紧跟在 π 后的括号中。
例,可以通过如下关系代数来获得上述的教师列表:πID,name,salary(instructor)。
关系运算组合:因为关系运算的结果也是一个关系,所以可以用一个关系运算的结果作为参数来进行另外一个关系运算,这就称为关系运算组合。
关系的并、差运算:这与集合的运算是一样的,但于是关系 r 和关系 s 的并、差运算有关系,则要求下面两个条件同时成立:
- 关系r、必须是是同元的,即它们的属性数目必须相同。
- 对所有的i,r 的第 i 个属性的域必须和 s 的第 i 个属性的域相同。
笛卡尔乘积:使得我们可以将任意两个关系的信息组合在一起,用"×"表示。
更名运算:关系代数的表达式没用可供我们引用的名字,这一点与数据库中的关系有所不同,但我们可以使用"ρ"表示更名运算来为其赋一个名。
假设关系代数表达式E,表达式ρx(E)返回E的结果,并把名字x赋给了它。
对于一个关系r来说,它自身被认为是一个关系代数表达式。因此,我们可以将更名运算运用于关系r,这样可以得到具有新名字的一个相同的关系。
更名运算的另一形式如下:
假设关系代数表达式E是n元的,则表达式:ρx(A1,A2,...,An)(E),返回表达式E的结果,并赋给它名字x,同时将各个属性更名为A1,A2,...,An。
关系代数的形式化定义:
关系代数中基本的表达式是如下二者之一:
- 数据库中的一个关系。
- 一个常数关系。
常数关系可以用在{ }内列出它的元组来表示,例如{(22222, Einstein, Physics, 95000),(76543,Singh,Finance,80000)}
附加的关系代数运算:
集合交运算:不难证明:r ∩ s = r - ( r - s )。
自然连接运算:二元运算自然连接可以将某些选择运算和笛卡尔乘积运算合并为一个运算。用符号⋈表示。自然连接运算首先形成它的两个参数的笛卡尔乘积,然后基于两个关系模式中都出现的属性上的相等性进行选择,最后还要去除重复属性。其形式化定义如下:
r⋈s=πR∪S(σr.A1=s.A1 and r.A2=s.A2 and ... and r.An=s.An (r×s))
其中R∩S={A1, A2, ..., An}
赋值运算:有时通过给临时关系变量赋值的方法来写关系代数表达式会很方便。赋值运算用符号←表示,与程序语言中的赋值类似。
例如:我们可以用赋值运算来简化自然连接的形式化定义:
temp1←R×S
temp2←σr.A1=s.A1 and r.A2=s.A2 and ... and r.An=s.An (temp1)
r⋈s=πR∪S(temp2)
外连接运算:外连接运算是连接运算的扩展,可以处理确实信息。外连接运算与自然连接运算比较类似,不同之处在于它在结果中创建带空值的元组,以此来保留在连接中丢失的那些元组。
外连接有三种形式:
- 左外连接:用符号⋊表示,取出左侧关系中所有与右侧关系的任意元组都不匹配的元组,用空值填充所有来自右侧关系的属性,再把产生的元组加到自然连接的结果中。
- 右外连接:用符号⋉表示,取出右侧关系中所有与左侧关系的任意元组都不匹配的元组,用空值填充所有来自左侧关系的属性,再把产生的元组加到自然连接的结果中。
- 全外连接:用符号表示,相当于既做左外连接,又做右外连接。
扩展的关系代数运算:
广义投影:通过允许在投影列表中使用算术运算和字符串函数等来对投影进行扩展,广义投影运算形式为:
πF1,F2,...,Fn(E)
其中E是任意的关系代数表达式,而F1,F2,...,Fn中的每一个都是涉及常量以及E的模式中的属性的算术表达式。最基本的情况下算术表达式可以仅仅是一个属性或常量。通常来说,在表达式中可以使用对数值属性或者产生数值结果的表达式的+、-、*、/ 等代数运算。
聚集:聚集函数输入值的一个汇集,将但一值作为结果返回。聚集函数有:sum,avg,count,min,max。此外,我们可以在函数后加上 -distinct 来对输入的值进行去重。
聚集运算Ç通常的形式如下:
G1,G2,...,GnÇF1(A1),F2(A2),...,Fn(An)(E)
其中E是任意关系代数表达式,G1,G2,...,Gn是用于分组的一系列属性;每个Fi是一个聚集函数,每个Ai是一个属性名。运算的含义如下,表达式E的结果中元组以如下方式被分成若干组:
- 同一组中所有元组在G1,G2,...,Gn上的值相同。
- 不同组中元组在G1,G2,...,Gn上的值不同。