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

时间:2013-11-18 14:35:18

标签: sql sql-server tsql sql-order-by

我总是觉得没有指定'按顺序排列的查询。规则,将按照where子句中指定的结果对结果进行排序。

例如,我的where子句声明:

WHERE RESULTS_I_AM_SEARCHING_FOR IN
ITEM 1
ITEM 2
ITEM 3

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

感谢并抱歉这个非常基本的问题!

戴蒙

3 个答案:

答案 0 :(得分:47)

如果您未指定ORDER BY,则会定义 NO ORDER

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

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

那些仍然不相信我的人

更新: - 这里有两篇很好的博客文章说明了这一点(包含代码示例!):

答案 1 :(得分:23)

使用SQL Server,如果未指定ORDER BY,则会以最快的方式返回结果。

因此,如果没有ORDER BY,则不会对订单做出任何假设

答案 2 :(得分:2)

正如已经说过的那样,你永远不应该依赖“默认订单”,因为它不存在。无论如何,如果你仍然想知道关于sql server实现的一些好奇的细节,你可以看看:

http://exacthelp.blogspot.co.uk/2012/10/default-order-of-select-statement-in.html