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

Cel*_*tas 5 sql relational-database

我刚学习关系数据库,并被告知他们不允许重复输入.我起初并不相信这一点,因为我编写的SQL查询返回带有重复项的结果.这是系统不存储一个关系中相同的集合吗?我的意思是,如果你有书籍和作者的关系,只选择作者,那么如果同一作者写了不同的书(例如select author from Books),那么可能会出现重复.此外,如果您使用加入,那么您可以获得重复的结果,对吗?还有其他场景吗?

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

nvo*_*gel 9

关系数据库仅包含关系变量(关系"表"),根据定义,它们始终由唯一元组("行")组成.关系数据库管理系统使用基于Codd关系代数的查询语言,类似地不能在结果中生成重复,因为关系代数中的每个结果也是一个关系,因此由唯一元组组成.

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

SELECT author FROM Books;
Run Code Online (Sandbox Code Playgroud)

可能会返回重复的行,但显然是相似的关系查询:

? author (Books)
Run Code Online (Sandbox Code Playgroud)

将不会.关系查询更像是以下SQL:

SELECT DISTINCT author FROM Books;
Run Code Online (Sandbox Code Playgroud)

您必须非常小心SQL,以避免在您不希望或期望它们的地方获得重复项.即使是经验丰富的SQL用户也会遇到问题.


Erw*_*out 5

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

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

简介:关系DBMS确实不能允许重复,并且典型的SQL引擎不是关系DBMS的正是这个原因(ao)