对于集合 R & S,
一个元组在 R ∪ S 中当且仅当它在 R 中 OR 在 S 中。
一个元组在 R ∩ S 中当且仅当它在 R AND 在 S 中。
一个元组在 R - S 中当且仅当它在 R 中而不在 S 中。
对于关系(定义为集合或集合加标题),
UNION 返回一个操作数或另一个操作数中的元组。
INTERSECTION 返回一个操作数和另一个操作数中的元组。
DIFFERENCE 返回一个操作数而不是另一个操作数中的元组。
因此我们可以合理地将这些称为“设置”或“布尔”操作。
如果每个基本关系都包含从一些关联的谓词(由属性名称参数化的句子模板)构成真正的命题(陈述)的元组,那么每个查询结果 有一个由它的操作数谓词组成的谓词,它的值包含从那个谓词提出一个真实命题的元组:
假设U 包含 U 的元组和V 包含 V 的元组。那么
U UNION V 保存元组 U OR V
U INTERSECTION V 保存元组 U AND V
U DIFFERENCE V 包含 U AND NOT V 的元组
但不仅如此,那些运算符对应于一些布尔命题逻辑连接词/非终结符,而且每个关系运算符都对应于谓词逻辑连接词/非终结符,每个查询表达式都有一个关联的谓词,并且每个查询结果值都保存着从那个谓词提出一个真实命题的元组:
U JOIN V 保存元组 U AND V
U RESTRICTcondition 保存元组 U AND condition
U PROJECT A 保存除 A 之外的所有属性的 FORSOME 值的元组,U
U RENAME A A' 保存元组,其中U 将 A 替换为 A'
所以真的所有关系运算符可以绑定到谓词逻辑的语法和语义。这是数学、科学(包括计算机科学)和工程(包括软件工程)中精确度的语言/符号。事实上,这就是我们知道查询含义的方式。因此,这三个运算符在某种意义上实际上并不是布尔型,而是所有关系运算符都是逻辑:每个关系表达式都对应一个谓词逻辑表达式。
之所以称这三个“集合运算符”是因为作为结果关系的主体的集合是根据同名的集合运算符从作为操作数关系的主体的集合产生的。这可能是在您的脑海中将它们分组或记住它们或它们的名字的有用方式,并且无疑激发了它们的名字。但鉴于关系运算符与谓词逻辑连接词/非终结符的对应关系,关系表达式与谓词逻辑表达式的对应关系,以及谓词与关系值的对应关系,一些关系运算符让人想起一些集合运算符的事实是 完全不相关。
(事实上,你可以用关系之类的东西来做一个代数,但它的身体是袋子而不是集合。)