SQL查询到关系代数,如何连接相同的表?

SQL查询到关系代数,如何连接相同的表?,sql,relational-algebra,Sql,Relational Algebra,在关系代数中,如何将表连接到自身 问题是: 分行(分行名称、分行城市、资产) 账户(账户编号、分行名称、余额) 现在,考虑下面的SQL查询: Select T.branch_name From branch T, branch S Where T.assets > S.assets and S.branch_city = “Shanghai” 编写与该查询等效的最优化的关系代数表达式。证明你的选择是正确的 我有点困惑。我知道如何将两个表连接在一起,比如分行到账户,但我不确定在

在关系代数中,如何将表连接到自身

问题是:

分行(分行名称、分行城市、资产)

账户(账户编号、分行名称、余额)

现在,考虑下面的SQL查询:

Select T.branch_name  
From branch T, branch S  
Where T.assets > S.assets and S.branch_city = “Shanghai”  
编写与该查询等效的最优化的关系代数表达式。证明你的选择是正确的

我有点困惑。我知道如何将两个表连接在一起,比如分行到账户,但我不确定在这种情况下如何将两个相同的表连接在一起


非常感谢您的帮助,谢谢。

您可以这样将两个表连接在一起:

SELECT * FROM
branch INNER JOIN account ON (branch.X=account.Y)
WHERE ...
要进行自联接,您将执行相同的操作,但alias表中的一个(或两个)除外,这样更清楚:

SELECT * FROM
branch AS branch1 JOIN branch AS branch2 ON (branch1.X=branch2.Y)
WHERE ...
此外,您可以将
WHERE
子句放在连接条件本身中:

SELECT * FROM
branch AS branch1 JOIN branch AS branch2 ON (branch1.X=branch2.Y AND branch1.A > branch2.B)
抱歉,如果上面的内容有点模糊,并且没有使用确切的变量名--我对上面给出的示例有点困惑,因此如果您想更新问题或留下评论,我可以更新示例。

您的查询已经在进行自连接,请仔细检查您的语法。有许多RAs(关系代数)。它们的运算符不同,甚至关系是什么。为您的客户提供参考和/或定义。例如教科书名称、版本和页码。定义“翻译”/“转换”--相同的结果?相同的结构?SQL表如何对应于关系——如果一个表有重复的行或空行怎么办?定义“最优化”。PS展示你能做的部分和你尝试过的部分。解释“在这些情况下”。请参阅,其他链接,点击谷歌的“stackexchange家庭作业”和文本上方的投票箭头鼠标。如果这个问题是关于关系代数的,那么SQL中的答案是不对的。但是q没有指定RA的哪个版本。至于“最优化”,您的任何答案都可能是这样,或者它们可能都是相同的——这完全取决于执行引擎/查询计划,而不是SQL的特定语法。