这个 SQL 查询等同于这个关系代数语句吗?
Is this SQL query equivalent to this relational algebra statement?
我有以下 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
是的,它是(您的 SQL 查询)关系语句的表示。
π 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,用⋈代替JOIN,用σ代替WHERE。这是错误的。
我有以下 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
是的,它是(您的 SQL 查询)关系语句的表示。
π 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,用⋈代替JOIN,用σ代替WHERE。这是错误的。