SQL Server关系代数中的语义


SQL #sql server #关系代数2012-10-23 16:49
1. 并

数学中两个集合的并是这两个集合的所有元素组成的集合。因为一个关系是(或更确切地说是包含)一个集合,即一个元组的集合,所以构造这样两个集合的并是完全可能的;所得结果包含了出现在任一个或两个原关系中的所有元组。例如,出现在关系变量S中的供应商元组的集合与出现在关系变量P中的零件元组的集合的并当然是一个集合。

然而,尽管这一结果是一个集合,却不是一个关系;关系不能含有不同类型的元组,其中的元组必须是同类的。当然,我们希望结果是一个关系,因为要保持封闭性。所以,关系代数中的并,不是通常数学中的并;它是一种特殊类型的并,要求两个参与操作的关系是同一类型—即它们或者都包含供应商元组,或者都包含零件元组,而不能是两者的混合。如果两个关系属于同一类型,那就可以进行并操作,得到的结果是一个相同类型的关系;换句话说,封闭的特性被保持了下来。

下面是关系并操作的定义:给定两个相同类型的关系A和B,两者的并即A UNION B是相同类型的一个关系,关系的主体由出现在A中或B中或同时出现在两者之中的所有元组组成。

2. 交

由于和并基本相同的原因,关系交操作符的操作对象必须是相同类型的。给定类型相同的关系A和B,它们的交A INTERSECT B是一个相同类型的关系,关系的主体包含同时出现在A和B中的所有元组。

3. 差

像并和交一样,关系的差操作符也要求操作对象是同一类型。给定两个类型相同的关系A和B,它们的差A MINUS B(两者有先后次序)是一个与它们的类型相同的关系,关系的主体包含属于A但不属于B的所有元组。来自程序员之家

4. 积

数学里的两个集合的笛卡尔积是满足如下条件的有序对的集合:每个有序对的第一个元素来自于第一个集合,第二个元素来自第二个集合。因此,两个关系的笛卡尔积可粗略地说是有序元组对的集合。但我们想保持封闭的特性;换句话说,我们想要结果包含元组本身,而不是有序的元组对。因此,关系的笛卡尔积是对这一操作的一个扩充,其中的每个有序元组对代替以两个相关元组相并得出的一个元组(这里的“并”是一般集合理论上的并,而不是特殊的关系意义上)。因此给定:

{A 1 : a 1,A 2 : a 2,?,A m : a m}

{B 1 : b 1,B 2 : b 2,?,B n : b n}

两者的并是一个单个元组:

{A 1 : a 1,A 2 : a 2,?,A m : a m,B 1 : b 1,B 2 : b 2,?,B n : b n}

笛卡尔积连接中的另一个问题是:需要结果关系有一个正确形式的表头(即正确的关系类型)。现在已明确的是结果的表头包含了两个输入关系的所有属性。如果两个关系的表头有共同的属性名,问题就会出现了;如果操作允许,结果的表头会有两个相同名称的属性,这就不再是一个“好的形式”(w e l l - f o r m e d)。如果对两个有相同属性名称的关系进行笛卡尔积操作,必须首先用RENAM E操作符适当地更改属性的名称。


相关文章

粤ICP备11097351号-1