我总是觉得没有指定'按顺序排列的查询。规则,将按照where子句中指定的结果对结果进行排序。
例如,我的where子句声明:
WHERE RESULTS_I_AM_SEARCHING_FOR IN
ITEM 1
ITEM 2
ITEM 3
我原本想象,第1,2和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