2

3 つの異なるテーブルがあり、それぞれに 1 つのフィールドしかありません。

|fname1 |    |fname2 |    |fname3 |
|*******|    |*******|    |*******|
|Adam   |    |Andy   |    |Alan   |
|Bob    |    |Bryan  |    |David  |
|Charles|    |Chuck  |    |Shawn  |

次のように、これらのテーブルを「fname」フィールドのみを持つ 1 つの大きなテーブルにマージしたいと考えています。

|fname  |
|*******|
|Adam   |
|Bob    |
|Charles|
|Andy   |
|Bryan  |
|Chuck  |
|Alan   |
|David  |
|Shawn  |

これは SQL では非常に単純ですが、リレーショナル代数でこれをどのように記述するかは、一生わかりません。順序は気にしません。すべてのデータが 1 つのフィールドの下の 1 つの大きなテーブルにあるだけです。

4

1 に答える 1

2

理論的には、関係代数は集合を扱います。セットが重複することはありません。

実際には、リレーショナル dbms は集合ベースのリレーショナル代数を実装していません。その理由の 1 つはパフォーマンスです。すべてのクエリで重複を削除する必要があるため (これはコストのかかる操作です)、実際には、DBMS は複数セットを扱います。つまり、重複するタプルが許可されます。

これには課題があります。SQL には、重複するタプルを処理する適切な方法が実際にはありません。たとえば、1 つの属性と 2 つのタプルを持つテーブルがあり、どちらも同一であるとします。ここで、最初のタプルを削除し、2 番目のタプルを残します。ある種のハックがなければ、それはできません。

あなたの質問に戻ります。あなたの質問に対する答えは UNION です。

R1 U R2 U R3

関係代数では、重複があっても問題ありません。理論的には、セットに重複を含めることはできないためです。

--dmg

于 2013-05-02T07:58:33.853 に答える