我知道如果SQL查询没有按Order By参数排序,它根本就没有排序。在没有订单依据的情况下运行查询时,我希望以不同的顺序看到相同的结果。
然而,结果 仍然按顺序返回(即有第1行,第2行等等),只是不可靠 - 所以如果它们不是排序,决定(可能根据具体情况)返回行的顺序。
具体来说,我的经验是MySQL,但我从理论角度对此感到好奇,而不是试图解决具体问题。
编辑:如果我真的想订购查询,我总是使用订单依据 - 这只是好奇心。
答案 0 :(得分:2)
由于显而易见的原因,数据库供应商不会发布有关无序结果集中的行顺序的信息(这只会导致人们依赖于不可靠的当前实现)。
然而,常识告诉我们,导致明显秩序的最可能因素包括:
答案 1 :(得分:1)
在没有指定ORDER BY
时确定行顺序的答案是:许多内部考虑因素可能取决于数据如何存储在磁盘(或内存中),哪些类型的操作db会执行您的查询(例如JOIN
s),以及许多因数据库引擎而异的因素。
最重要的是,SQL标准都说dbms不必保证任何关于排序结果集的内容,除非你使用ORDER BY
。所以,没有理论上的默认。如果您需要以某种方式对数据进行排序,总是使用ORDER BY
。
答案 2 :(得分:0)
它取决于数据库:under some curcunmstances如果没有指定ORDER BY
,SQL Server将对聚簇索引进行排序,因为它近似于行如何存储在磁盘上。
对于其他数据库,所有投注都已关闭,您可以看到原因:即使其他供应商不一定采用与SQL Server相同的机制,他们当然希望能够自由地重新设计光盘/缓冲区/日志/块级别,无需重写部分数据/查询解析引擎。
其次,SQL作为声明性语言与您(用户)达成协议,您告诉它您想要什么,并决定 如何获取它。如果您没有指定排序,那么您就不能对您获得的数据的顺序做出任何假设。
编辑:在评论中指出的附带条款中添加。