2011-01-23 12 views
13

SQLにはDISTINCT演算子があります。しかし、私はテーブルからいくつかの異なる値を取得する必要があり、リレーショナル代数のみを使用することができます。方法はありますか?関係代数のDISTINCT行の選択

+0

おそらく、除算演算子Rel1÷Rel1を使うことができます! –

答えて

31

関係投影は常に別個のタプルを返します。したがって、DISTINCTは決して必要ありません。リレーショナル・モデルとSQLモデルの大きな違いの1つは、RA内に重複したタプルが許可されていないことです。

+0

これは古い質問ですが、私は対称代数のような別の演算子があります。私のUllmans Database Systems The Complete Bookの版では、次の章にあります:「5.2.1重複排除」 –

+3

こんにちはDDavid、私はあなたがMolina、Ullman、Widom(途方もない優れた本と私が頻繁に作った点を見逃しているかもしれないと思うのですが、それは普通のセットでは許されません。セクション5.2からの引用:「リレーショナル・モデルを使用するDBMSが最初に開発されたとき、それらの問合せ言語は主に関係代数を実装しました。しかし、これらのシステムでは、リレーションをバッグではなくセットとみなしていました」(私の強調)彼らは、バッグ操作がRAによってサポートされているセット操作と異なることを指摘しています。SQLのDISTINCT「演算子」は、 RAはタプルのセットを排他的に扱います。 – sqlvogel

3

関係代数は集合理論に基づいています。 SQLはマルチセット理論の実装です。セットには常に別個の要素があります。したがって、タプルは、リレーショナル代数ではデフォルトで区別されます。