sql - SQL 结果什么时候可以包含重复项?

标签 sql relational-database

我只是在学习关系数据库,并被告知他们不允许重复条目。起初我不相信这一点,因为我编写了返回重复结果的 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/

相关文章:

database - 没有主键的关系(表)是否符合适当的关系?

sql - upsert sql查询

sql - MySQL SUM 查询一周的每日值问题

mysql - 如何建模一个页面可以有不同内容类型的数据库?

mysql - SQL Row_number() 重复

mysql - 使用两个单独的类别表优化数据库

sql - 架构设计 : to-one foreign relation with heterogeneous type (different targets), 但角色相同

sql - 索引扫描不能与 LIMIT 一起正常工作

sql - ActiveRecord::StatementInvalid。 PG错误

sql - 您可以在 PostgreSQL 中将表权限从一个表复制到另一个表吗?