内连接可交换的证明

joe*_*e55 3 join relational-theory relations relational-algebra

我试图向自己证明内部联接的顺序并不重要,但是,从抽象的意义上来说,我什么也没想到。

如何证明一组 INNER JOIN 的执行顺序(将多个表转换为单个表)不会影响结果集(即证明 INNER JOIN 操作的交换性和关联性)?

joa*_*olo 6

内连接是笛卡尔积中满足特定条件的行的子集。尽管笛卡尔积不是交换律(也不是结合律),但它是关系理论的。

\n\n

之所以如此,是因为属性的顺序在关系理论中并不重要。如果A和B是表,则:

\n\n
A x B = { (a1, a2, .., an, b1, b2, .. bn) | (a1..an) \xe2\x82\xac A and (b1..bn) \xe2\x82\xac B}\n      = { (b1, b2, .., bn, a1, a2, .. an) | (a1..an) \xe2\x82\xac A and (b1..bn) \xe2\x82\xac B}  ((1))\n      = { (b1, b2, .., bn, a1, a2, .. an) | (b1..bn) \xe2\x82\xac B and (a1..an) \xe2\x82\xac A}  ((2))\n      = B x A                                                               ((3))\n
Run Code Online (Sandbox Code Playgroud)\n\n

((1)) 因为属性的顺序并不重要
\n((2)) 因为逻辑 and 是可交换的
\n((3)) 根据 B x A 的定义

\n\n

无论 JOIN 顺序如何,选择必须选择笛卡尔元素的条件都是相同的,因此不会影响此推理。

\n\n

关联性的证明遵循相同的推理思路。

\n