【发布时间】:2021-12-08 09:16:40
【问题描述】:
考虑关系enrolled(student, course),其中(student, course) 是主键,关系paid(student, amount),其中student 是主键。假设没有空值,也没有外键或完整性约束。
给定以下四个查询:
查询1:
select student from enrolled where student in (select student from paid)
查询2:
select student from paid where student in (select student from enrolled)
查询3:
select E.student from enrolled E, paid P where E.student = P.student
查询4:
select student from paid where exists
(select * from enrolled where enrolled.student = paid.student)
下列哪一项是正确的?
(A) 对于任何数据库,所有查询都返回相同的行集
(B) Query2 和 Query4 为所有数据库返回相同的行集,但存在 Query1 和 Query2 返回不同行集
的数据库(C) 存在 Query3 返回的行数比 Query2 少的数据库
(D) 存在 Query4 在运行时会遇到完整性违规的数据库
这个问题本来很简单,但如果我们认为“行集”和“行”这两个术语的含义是等价的,那么我们会得到一个答案,但是如果我们认为它们具有不同的含义,然后我们得到另一个答案。
现在我的同行here 中很少有人认为术语“行集”和“行”具有不同的含义。他们说,在 SQL 中,当我们改变一个表时,我们会得到x rows affected 的提示。因此在 SQL 中,表中的元组称为行(允许重复)。而“行集”是基于集合论概念(或关系代数概念)的表中删除重复项的元组集合。
而其他同行认为术语“行集”和“行”的含义相同。他们说在 SQL 中,当我们输出一个表时,我们会得到x rows in set 的提示。他们说在 SQL 中,术语“行集”和“行”可以互换使用。
就个人而言,我觉得它们的意思是一样的。但我不确定。请问谁能确认一下?
【问题讨论】:
-
这部分是关于英语的问题,而不是 SQL。 “返回严格较少的行”意味着返回具有较少成员的行集。 (而且“严格”是多余的。)独立于用法来谈论单词含义或“含义相同”的单词通常没有意义。
-
这里的SQL“行集”查询结果不是一组行值。不清楚是指一袋行值还是行值列表。查询返回行值列表。不清楚这里的“行集”是否忽略了顺序(给一个袋子)或没有(给一个列表)。写关于 SQL 的文章一向非常草率。 PS 未修饰的“行”可以表示行值或行值的实例或行值变量——询问演讲者/作者。法式吐司不是吐司。 (而不是法语。)给出此引用所用 SQL 的参考及其“行集”的定义。
-
它们似乎意味着包不列出,否则选择都是错误的。
-
那么,法式吐司是吐司吗?语言很滑。重新“行”,它类似于“整数”。当有人说它们有两个整数时,它们可能意味着两个值,它们必须不同,否则只会有 1 个值;或者当他们有两个六时,他们可能会说,所以值六的两个实例;并且它们可能草率地表示包含整数的变量或常量。在 SQL 中,特别是“表”被草率地用于表值或基表,即表值变量。始终区分值与变量以及要明确的确切数据类型。 PS 请提供您的 SQL 参考。
-
GATE 告诉你它说它使用的是什么 SQL 引用?在我的上一条评论中,我指的是在那之前的评论。 (“行集”不是官方的 SQL 技术术语。“结果集”是。它不是一个集合,它是一个列表。)
标签: sql relational-database definition relational-algebra