joe*_*e55 3 join relational-theory relations relational-algebra
我试图向自己证明内部联接的顺序并不重要,但是,从抽象的意义上来说,我什么也没想到。
如何证明一组 INNER JOIN 的执行顺序(将多个表转换为单个表)不会影响结果集(即证明 INNER JOIN 操作的交换性和关联性)?
内连接是笛卡尔积中满足特定条件的行的子集。尽管笛卡尔积不是交换律(也不是结合律),但它是关系理论的。
\n\n之所以如此,是因为属性的顺序在关系理论中并不重要。如果A和B是表,则:
\n\nA 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 的定义
无论 JOIN 顺序如何,选择必须选择笛卡尔元素的条件都是相同的,因此不会影响此推理。
\n\n关联性的证明遵循相同的推理思路。
\n