我有以下SQL查询:
SELECT foo.a, bar.b, baz.c FROM foo
INNER JOIN bar ON bar.id = foo.bar_id
INNER JOIN baz ON baz.id = foo.baz_id
WHERE foo.z = 50;
我想知道这是否等同于这种关系代数陈述。
π foo.a, bar.b, baz.c (foo) ⋈ bar.id = foo.bar_id (bar) ⋈ baz.id = foo.baz_id (baz) σ foo.z = 50
答案 0 :(得分:0)
π foo.a, bar.b, baz.c (foo) ⋈ bar.id = foo.bar_id (bar) ⋈ baz.id = foo.baz_id (baz) σ foo.z = 50
这个代数表达式不是根据关系代数的任何常见版本编写的。所以我们不能说SQL是等价的。这似乎是你所创造的而不是你所得到的。
通常我们写道:
π attributes ( relation )
σ condition ( relation )
和代数表达式应该嵌套它们:
π attributes ( σ condition ( relation ) )
您可以在什么条件下编写以及是否可以在任何操作员调用中使用带有属性名称的点取决于您的代数的定义方式。使用点需要附带传递给操作符的关系值的名称。
在您提及您应该使用的代数的参考或描述之前,您的问题无法完全回答。
看起来你可能认为你所要做的就是用π替换SELECT,用JO替换JO,用σ替换WHERE。那是错的。
答案 1 :(得分:-1)
是的,它是(您的SQL查询)您的关系声明的表示。