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

标签 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 中非常简单,但我终究无法弄清楚如何在关系代数中编写它。我不关心顺序,只关心所有数据都在一个字段下的一个大表中。

最佳答案

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

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

这带来了一个挑战:SQL 并没有真正处理重复元组的好方法。例如,假设您有一个包含一个属性和两个元组的表,两者都相同。现在删除第一个元组并保留第二个。如果没有某种黑客手段,您将无法做到这一点。

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

R1 U R2 U R3

在关系代数中是否有重复项并不重要,因为理论上,集合中不能有重复项。

--伤害

关于database - 合并关系代数中的单字段表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16203151/

相关文章:

relational-database - 给定 FD :s? 查找候选键的方法

database - CLASSIC asp 连接到 SQL Express Server 500 服务器错误

mysql - 测试数据库中重复键的最佳方法

database - BCNF 和非平凡的函数依赖

database - 数据库中的功能依赖性

SQL 到关系代数

php - 用于文本自然语言处理的 Laravel 数据库设计

android - 如何使用推送通知同步 SQLite 和 MySQL 数据库?

sql - 位图索引如何工作?

mysql - 如何在单个查询一对多关系中使用 LAST_INSERT_ID?