2016-11-23 67 views
1

我有以下SQL查詢:這個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

是的。 [這是一組幻燈片](http://www.cs.cornell.edu/projects/btr/bioinformaticsschool/slides/gehrke.pdf),您可以使用它將您的SQL轉換爲關係代數。 –

+0

「關係代數」有很多種版本。根據我所見過的任何代數,你沒有正確使用項目或進行限制。如何在您應該使用的項目中定義項目,限制和連接?請爲您的版本提供參考。關係代數的大多數演示都限制和加入了關於*任何關係值*的工作。即沒有點。但是dot需要關係變量或常量的名稱(例如,您的答案和接受的答案)或其他值以及臨時名稱(例如SQL)。 – philipxy

+0

你給了那個代數表達式,還是你產生了它? – philipxy

回答

-1

是的,(你的SQL查詢)爲您的關係聲明的表示。

+0

再看看所謂的relatonal代數表達式。看到我的答案。 – philipxy

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,用⋈替換SELECT,用σ替換WHERE。那是錯的。