Answers:
不,你的同事错了。
除非ORDER BY
查询中有子句,否则所有SQL产品-根据SQL标准运行的DBMS-不保证查询输出的结果将以任何方式排序。
排序是根据“语言”元素中描述的比较规则执行的。空值高于所有其他值。如果您的订购说明不能确定完整的订购,则具有最后标识的排序键重复值的行将具有任意顺序。如果未指定
ORDER BY
,则结果表的行具有任意顺序。
就像ypercube的答案中指出的那样,当没有ORDER BY
子句时,就没有定义的order。
我想补充的一点是,认识到SQL非常抽象是很重要的,它并没有一步一步地指定DBMS要做的事情,而是指定了最终结果的要求。
这意味着,如果已经以确保正确顺序的方式查询了数据,则是这样,因为DBMS决定了这种策略,因此它将已经知道不需要额外的排序工作即可满足该ORDER BY
条款的要求。。
另一方面,如果您未指定顺序对您来说很重要(即使实际上是顺序?),则DBMS会考虑到这一点,并且如果找到了一种更有效地在其中找到正确数据的策略。其他一些订单将利用您显然并不关心该订单的事实。(基于相关表,软件补丁等中不断增加的数据量,所选择的策略也可能会随着时间的流逝而改变)
即,删除该ORDER BY
子句的上行空间很小(查询大小略小),但如果顺序实际上很重要,则潜在的巨大下行空间。特别是这样,因为这可以很好地与测试数据集配合使用,并且通过验收测试只会导致严重的问题。