这个问题让我开始思考: ROW_NUMBER() OVER (PARTITION BY,A ORDER BY C) doesn't use index on (A,B,C) 在其中提问者指出两个函数给出了相同的结果集,但是他们不t 因为它们具有相同的行,但它们始终处于不同(且一致)的顺序。
结果集的顺序是结果集的一部分吗?维基百科暗示不(但没有强烈确定答案,也没有从权威的立场发言):
https://en.wikipedia.org/wiki/Result_set
是
Sector Name
A Alpha
B Beta
相同的结果集
Sector Name
B Beta
A Alpha
我个人只使用 SQL Server,答案是否因平台而异?答案只是见仁见智吗?(如果是这样,请只给出事实的答案,或者至少给出专业机构的共识——请不要代表你的个人意见)
可能是 ANSI 92 的定义
http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt
给出了答案。第 3.1 节定义似乎区分了结果集和结果序列的概念。当我使用前一个短语写问题时,我并没有意识到这种区别
Ansi sql 不考虑对结果集的一部分进行排序 - 因此 2 是相同的。结果集确实是一个集合。
顺便说一句,“大玩家”(甲骨文、微软...)非常密切地关注 ansi sql,如果他们认为它们相同,那么标准也是如此...(在大多数情况下)
术语“结果集”[sic] 没有出现在 1992 SQL 标准中。它通常用于表示 select 语句的结果。这是表中部分排序的行序列:
来自 2003 SQL 标准:
(很明显,SELECT 语句的结果是有序的,因为它的 ORDER BY 就是这样做的。)
表是无序的。但是结果集 [sic] 不是表格。