关系代数 - 自然连接如何工作?

Relational Algebra - how does natural join work?

我真的对这个很困惑。据我了解,自然连接是一种内部连接,仅当 table1 具有某些与 table2 的拦截属性时才有效。然而,当我尝试使用它,并说取一个 table 与另一个 table 没有共同的列名时,它作为一个普通的笛卡尔积并显示结果。

此外,当我用不同的 table 再次尝试时,它们又没有任何共同点,它突然没有显示任何结果。我很困惑,我想我在这里遗漏了一些重要的东西。有人有想法吗?谢谢!

嗯,你已经学到了第一个重要的教训,那就是避免natural join。这只是糟糕的语法,因为它甚至没有考虑正确声明的外键关系并且隐藏了 join 条件——这使得查询难以维护和调试。

自然联接是内部联接等值联接,其联接条件位于具有相同 名称 的列上。自然连接甚至不考虑类型,因此如果您的数据真的很乱,查询可能会出现类型转换错误。

如果公共列名上对应的内连接没有匹配项,则returns空集。如果没有共同的列名,则与 cross join.

相同

思路是自然连接(inner natural join)生成两个表的笛卡尔积。当表具有重复的列名时,最终结果集仅包含那些具有相同列名的笛卡尔积行。