theta join和inner join有什么区别?

时间:2018-06-17 13:41:32

标签: relational-database relational-algebra

theta join和内部联接看起来与我完全相同:它们是笛卡尔积,然后是任意选择。还是我错过了他们的分歧?感谢。

上面的维基百科链接表示theta-join需要进行比较&两个属性。但这不正确。相反,theta-join可以采取任何选择条件。

来自数据库系统概念,它应该遵循SQL标准,比维基百科更连贯可靠:

  

theta join操作是自然连接操作的变体   这使我们能够将选择和笛卡尔积相结合   单一操作。考虑关系r(R)和s(S),并且将θ设为a   模式中的属性谓词R∪S. theta连接操作   r join_theta s的定义如下:

     

r join_theta s = sigma_theta(r×s)

     

...

     

我们之前研究过的不保留不匹配的联接操作   元组称为内部联接操作,以区别于它们   外连接操作。

我仍然认为他们是同一个概念。

Difference between a theta join, equijoin and natural join没有解释theta连接和内连接之间的区别。

1 个答案:

答案 0 :(得分:4)

没有单一的“关系代数”。它们甚至在关系中也有所不同。 Codd最初将theta join定义为采用二元运算符(theta)&两个属性。这就是人们通常所说的术语。来自Codd 1992年出版的“数据库管理关系模型第2版”一书:

  

RB-14-RB-23 Theta-Join运算符

     

theta-join运算符使用两个R表作为其操作数。它   生成一个包含一个操作数行的R表   (比方说S)与第二个操作数(比如T)的行连接,但是   仅在发现指定条件成立的情况下。为简洁起见,   此运算符通常称为 join

     

join 运算符中表示的条件涉及比较每个条件   来自S列的值,其中每个值来自T列。列   要比较的内容在 join 命令中明确指出;这些专栏   被称为比较列。这种情况可能涉及10个中的任何一个   列表中引用的比较器[...]

(通常这个术语用于像这样的运算符,但值可以取代属性。)

但是,Codd在那里与自己相矛盾,因为有“两个操作数”,但也有“特定条件”。后来他再次自相矛盾,说有一大堆联合称为theta-joins,equi-join就是其中之一:

  

RB-25自然加入运算符

     

如上一节所述, equi-join 会生成结果   其中两列的值相同,但不同   在列名称中。这两列来自比较   操作数的列;当然,列可能是   简单或复合。在 theta-join equi-join 的10种类型中   是唯一一个产生比较列的结果的人   是完全多余的,一个与另一个。 自然加入   表现就像 equi-join ,除了其中一个冗余   结果中省略了简单或复合的列。

您引用的教科书使用该术语来指代不同的东西,其中theta是一个结合比较的布尔表达式。这让人想起复杂条件下的SQL INNER JOIN。对于Codd来说,它是:

  

RB-24 Theta-Join的布尔扩展

观察引用的教科书的theta-join不是代数运算符(将参数值映射到结果值)!它是非终端语言(比较表达式不表示值)。教科书实际上没有定义足够的代数运算符来实现其代数式查询语言。据称,一组基本代数运算符包括select,但实际上它只定义为非终端语言,因为一个操作数是一个条件表达式。

(这种邋is是典型的关系型数据库教科书。在关系数据库领域存在着模糊和混乱的文化。这个领域就像Codd一样。)

相关问题