2016-11-23 5 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

はい、そうです。あなたのSQLをリレーショナル代数に変換するのに使うことができる[ここに一連のスライドがあります](http://www.cs.cornell.edu/projects/btr/bioinformaticsschool/slides/gehrke.pdf)です。 –

+0

"リレーショナル代数"には多くのバージョンがあります。プロジェクトを使用していないか、または私が見た代数に従って正しく制限しています。プロジェクト、制限、結合は、あなたが使用するはずのものでどのように定義されていますか?ご使用のバージョンのリファレンスを提供してください。関係代数の大部分のプレゼンテーションでは、*その関係の値を*制限することができます。つまり、ドットなし。しかしドットには、関連値を持つ変数や定数の名前(例えば、あなたの答えと受け入れられた答え)、あるいは値と一時的な名前(例えば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をπ、JOINを⋈、WHEREをσで置き換えることだけであると思うかもしれません。それは間違いです。

関連する問題