假设有以下两个表:
Table1 ( PK1, Attr1 )
Table2 ( PK2, Attr1 )
SQL语句:
SELECT *
FROM Table1,Table2
结果
(PK1,Table1.Attr1,PK2,Table2.Attr1)。
考虑到查询的以下语义,我无法理解为什么:
Table1 x Table2
和笛卡尔积的定义。
我也想知道关系代数等价表达式,如果有的话。
这不是家庭作业,我没有成功地抬头看这个,我提前感谢谁回答我。
答案 0 :(得分:2)
“SQL语句: 选择 * 从表1,表2
结果
(PK1,Table1.Attr1,PK2,Table2.Attr1)。“
不正确。该SQL语句导致[带有标题的表]
(PK1,Attr1,PK2,Attr1)
请注意区别。在SQL中,那些点限定符及其前面的内容是 NOT 结果中属性/列名称的一部分。它们是所谓的范围变量的名称,这些变量仅存在于的SELECT语句中。一旦SELECT语句被“终止”,那些范围变量就会消失。您可以尝试
来测试/验证这一点SELECT Table1.Attr1 FROM(你在这里加入);
任何符合标准的引擎都应该引发错误。有些引擎可能接受这些东西,因为作者认为这样做是合适的,但你应该意识到你不能指望任何随机引擎表现得像这样。
您也可以尝试
选择Attr1 FROM(你在这里加入);
但是现在每个引擎都应该抱怨含糊不清的列引用。
所以我们回过头来:SQL语句导致[带有标题的表格]
(PK1,Attr1,PK2,Attr1)。
这绝对不是一种关系,因此没有可能产生这种东西的关系代数的运算,因此根本不存在任何与你的SQL运算等价的关系代数公式。