"一条 SQL 语句:SELECT * FROM Table1,Table2
导致
(PK1, Table1.Attr1, PK2, Table2.Attr1)。”
不对。该 SQL 语句导致 [带有标题的表]
(PK1、Attr1、PK2、Attr1)
仔细注意差异。在 SQL 中,这些点限定符及其前面的内容不是结果中属性/列名的一部分。它们是所谓的范围变量的名称,这些变量只存在于它们出现的 SELECT 语句中。一旦 SELECT 语句“终止”,这些范围变量就会消失。您可以通过尝试测试/验证这一点
SELECT Table1.Attr1 FROM (你在这里加入);
任何符合标准的引擎都应该对此提出错误。一些引擎可能会接受这些东西,因为作者认为这样做是合适的,但您应该意识到,您不能期望任何随机引擎都表现得像这样。
你也可以试试
SELECT Attr1 FROM(您在这里加入);
但是现在每个引擎都应该抱怨列引用不明确。
所以我们回到:该 SQL 语句导致 [带有标题的表]
(PK1、Attr1、PK2、Attr1)。
这绝对不是关系,因此没有任何关系代数的运算可以产生这个东西,因此根本不存在任何与您的 SQL 运算等效的关系代数公式。