Cel*_*tas 5 sql relational-database
我刚学习关系数据库,并被告知他们不允许重复输入.我起初并不相信这一点,因为我编写的SQL查询返回带有重复项的结果.这是系统不存储一个关系中相同的集合吗?我的意思是,如果你有书籍和作者的关系,只选择作者,那么如果同一作者写了不同的书(例如select author from Books),那么可能会出现重复.此外,如果您使用加入,那么您可以获得重复的结果,对吗?还有其他场景吗?
基本上当人们说rmdbs没有重复时,他们只是指信息的存储方式(在一个表中)对吗?
关系数据库仅包含关系变量(关系"表"),根据定义,它们始终由唯一元组("行")组成.关系数据库管理系统使用基于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用户也会遇到问题.
关系是一组元组.因为它们是集合,所以关系不能包含两次相同的元组.
如果某些东西(例如SQL中的"表")确实包含"两次相同的元组",则该东西不是关系,并且该语言不是关系语言.充其量,如果(并且仅当)语言用户对自己施加必要的自律,该语言可以以关系方式使用.
简介:关系DBMS确实不能允许重复,并且典型的SQL引擎不是关系DBMS的正是这个原因(ao)