我有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中非常简单,但我不能为我的生活弄清楚如何在关系代数中写出这个。我不关心订单,只关注所有数据都在一个字段下的一个大表中。
答案 0 :(得分:2)
理论上,关系代数处理集合。一组永远不会有重复。
在实践中,关系型dbms不实现基于集合的关系代数。其中一个原因是表现。每个查询都必须删除重复项(这是一项昂贵的操作),所以在实践中,DBMS处理多组:允许重复元组。
这提出了一个挑战:SQL实际上没有一个很好的方法来处理重复的元组。例如,假设您有一个具有一个属性的表和两个相同的元组。现在删除第一个元组并离开第二个元组。如果没有某种类型的黑客攻击,你就无法做到这一点。
回到你的问题:你的问题的答案是UNION。
R1 U R2 U R3
在关系代数中,如果存在重复,则无关紧要,因为从理论上讲,你不能在集合中有重复。
- DMG