如果没有指定'Order by',查询会为您的记录集选择什么顺序?

dmo*_*ney 36 sql t-sql sql-server sql-order-by

我一直认为没有指定"排序依据"规则的查询会按照where子句中指定的结果对此进行排序.

例如,我的where子句指出:

WHERE RESULTS_I_AM_SEARCHING_FOR IN
ITEM 1
ITEM 2
ITEM 3
Run Code Online (Sandbox Code Playgroud)

我原以为第1项,第2项和第3项的结果将按照在哪里指定的顺序进行,但事实并非如此.有没有人知道在没有指定时它将它们排序的顺序是什么?

谢谢,对不起真正的基本问题!

达蒙

mar*_*c_s 51

如果未指定ORDER BY,则无定义ORDER.

结果可以以任意顺序返回 - 也可能随时间而变化.

在关系数据库中没有"自然顺序"或类似的东西(至少在我所知的所有内容中).获得可靠排序的唯一方法是明确指定一个ORDER BY子句.

更新:对于那些仍然不相信我的人 - 这里有两篇很好的博客文章说明了这一点(包含代码示例!):

  • @MuhammedAli:它可能**看起来像** - 但没有`ORDER BY`,**没有订单**保证.期.习惯它. (6认同)
  • +1 [此处也有一些讨论](http://stackoverflow.com/a/19983752/61305) (2认同)
  • @Muhammed Ali这是我的第一个假设,但在这种情况下,我必须使用的列明显缺乏主键!不幸的是但是嘿! (2认同)
  • 发现。喜欢Conor Cunningham的文章。 (2认同)

Cur*_*urt 24

对于SQL Server,如果未ORDER BY指定,则以尽可能最快的方式返回结果.

因此,如果没有ORDER BY,请不要对订单做出任何假设.