合并关系代数中的单字段表

时间:2013-04-24 22:14:42

标签: sql database relational-database relational-algebra

我有3个不同的表,每个表只有一个字段。

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

我想将这些表合并到一个只有“fname”字段的大表中,如下所示:

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

这在SQL中非常简单,但我不能为我的生活弄清楚如何在关系代数中写出这个。我不关心订单,只关注所有数据都在一个字段下的一个大表中。

1 个答案:

答案 0 :(得分:2)

理论上,关系代数处理集合。一组永远不会有重复。

在实践中,关系型dbms不实现基于集合的关系代数。其中一个原因是表现。每个查询都必须删除重复项(这是一项昂贵的操作),所以在实践中,DBMS处理多组:允许重复元组。

这提出了一个挑战:SQL实际上没有一个很好的方法来处理重复的元组。例如,假设您有一个具有一个属性的表和两个相同的元组。现在删除第一个元组并离开第二个元组。如果没有某种类型的黑客攻击,你就无法做到这一点。

回到你的问题:你的问题的答案是UNION。

R1 U R2 U R3

在关系代数中,如果存在重复,则无关紧要,因为从理论上讲,你不能在集合中有重复。

- DMG