我只是在学习关系数据库,并被告知他们不允许重复条目。起初我不相信这一点,因为我编写了返回重复结果的 SQL 查询。系统不会存储在一种关系中相同的集合,对吗?我的意思是,如果您有书籍和作者的关系并且只选择选择作者,那么如果同一作者写了不同的书(例如 select author from Books
),则可能会出现重复。另外,如果您使用 join 那么您可以获得重复的结果,对吗?还有其他场景吗?
基本上,当人们说 rmdbs 没有重复项时,他们只是指信息的存储方式(在一张表中),对吗?
最佳答案
关系数据库仅由关系变量(关系“表”)组成,根据定义,关系变量总是由唯一的元组(“行”)组成。关系数据库管理系统使用基于 Codd 关系代数的查询语言,该语言同样不会在结果中生成重复项,因为关系代数中的每个结果也是一个关系,因此由唯一的元组组成。
您之所以会感到困惑,是因为您假设 SQL 是一种适当的关系语言,而 SQL DBMS 是关系语言。不是,他们也不是。当您开始将 SQL 与其在关系世界中的近似等价物进行比较时,事情就会变得棘手。您的 SQL 查询:
SELECT author FROM Books;
可能会返回重复的行,但明显相似的关系查询:
π author (Books)
将不会。关系查询更像是以下 SQL:
SELECT DISTINCT author FROM Books;
在 SQL 中你必须非常小心,以避免在你不想要或不期望的地方得到重复。这是一个即使是有经验的 SQL 用户也会绊倒的问题。
关于sql - SQL 结果什么时候可以包含重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12812365/