Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL结果何时可以包含重复项?_Sql_Relational Database - Fatal编程技术网

SQL结果何时可以包含重复项?

SQL结果何时可以包含重复项?,sql,relational-database,Sql,Relational Database,我正在学习关系数据库,听说它们不允许重复条目。起初我并不相信这一点,因为我编写的SQL查询返回的结果是重复的。这是因为系统不存储在一个关系中相同的集合,对吗?我的意思是,如果您与书籍和作者有关系,并且只选择作者,那么如果同一作者编写了不同的书籍,则可能会出现重复(例如,从书籍中选择作者)。如果你使用join,那么你可以得到重复的结果,对吗?还有其他情况吗 基本上,当人们说RMDB没有重复项时,他们只是指信息的存储方式(在一个表中),对吗?您可以很好地将重复项放在一个表中,除非对该表有一个特别禁止

我正在学习关系数据库,听说它们不允许重复条目。起初我并不相信这一点,因为我编写的SQL查询返回的结果是重复的。这是因为系统不存储在一个关系中相同的集合,对吗?我的意思是,如果您与书籍和作者有关系,并且只选择作者,那么如果同一作者编写了不同的书籍,则可能会出现重复(例如,
从书籍中选择作者
)。如果你使用join,那么你可以得到重复的结果,对吗?还有其他情况吗


基本上,当人们说RMDB没有重复项时,他们只是指信息的存储方式(在一个表中),对吗?

您可以很好地将重复项放在一个表中,除非对该表有一个特别禁止它的约束


通常一个表有一个主键,而主键是一个约束,它不允许对作为键一部分的字段进行重复,这样可以防止表具有重复记录。

关系数据库仅由关系变量(关系“表”)组成,根据定义,关系“表”总是由唯一元组(“行”)组成。关系数据库管理系统使用基于Codd的关系代数的查询语言,该语言同样不能在结果中生成重复项,因为关系代数中的每个结果也是一个关系,因此由唯一元组组成

您的困惑是因为您假设SQL是一种适当的关系语言,而SQL DBMS是关系型的。它不是,他们也不是。当您开始将SQL与其在关系世界中的近似等价物进行比较时,事情就变得棘手了。您的SQL查询:

SELECT author FROM Books;
可能返回重复的行,但显然类似的关系查询:

π author (Books)
不会。关系查询更像以下SQL:

SELECT DISTINCT author FROM Books;

在SQL中,您必须非常小心,以避免在您不想要或不期望的地方获取重复项。即使是有经验的SQL用户也会遇到这个问题。

关系是一组元组。因为它们是集合,所以关系不能包含相同的元组两次

如果某个东西(例如SQL中的“表”)确实包含“两次相同的元组”,则该东西不是关系,该语言也不是关系语言。充其量,如果(且仅当)语言用户对自己施加必要的自律,语言可以以关系方式使用


简介:关系型数据库管理系统确实不允许重复,而典型的SQL引擎不是关系型数据库管理系统正是出于这个原因(a.o.)

关系型数据库管理系统可以有重复项,特别是在设置不太好的情况下。设置RDBMS需要您理解什么是规范化。如果您有重复项,这意味着您的表可能不是第一个标准化形式。第一个标准化表单中表的定义是消除或消除重复值,因此,如果您有重复/重复值,则需要首先通过消除重复值将表设置为第一个标准化表单,然后设置为第二个标准化表单,依此类推

“并且被告知他们不允许重复条目”-您可能误解或错过了某些上下文。@Mat我肯定我误解了,因此我要求澄清。这不清楚。“信息存储方式(在一个表中)”是什么意思?或“在一个关系中相同的集合[行?子行?”?是什么意思?”重复条目“?--重复行”或“重复结果”?但主键在sense中不是人工的吗?它是一个属性,仅用于此目的?我的意思是,如果查询
将x插入y
两次,其中y只有一个属性,会发生什么?如果列上有唯一的约束(或主键)对于该表,RDBMS将不允许第二次插入,但由databasedesigner告诉RDBMS哪些表中的哪些列应该是唯一的默认情况下强制此唯一性。您可以在表中放置重复项,但问题是如何匹配关系理论,即关系不能有重复项。这不是该问题的答案。这就是向下投票的目的。标记错误答案。错误答案不会随着时间的推移而变得更好。这个问题就足够了很明显,这个问题是关于表中的重复行的。这远远不能回答这个问题。