SQL行返回顺序

Joh*_*son 9 mysql sql-server sqlite oracle postgresql

直到最近我每天开始使用它时,我才很少使用SQL.我注意到如果没有使用"order by"子句:

  1. 选择表的一部分时,如果选择整个表,则返回的行看起来与它们出现的顺序相同
  2. 从连接中选择返回的行的顺序将由连接的最左侧成员确定.

这种行为是最常见的数据库(MySql,Oracle,PostgreSQL,Sqlite,Sql Server)中可以依赖的标准事物吗?(我甚至不知道是否可以在sqlite中真正依赖它).如果是这样的话,它是多么严格(例如,如果一个人使用"分组依据",各个团体是否都有这种排序)?

Phi*_*hil 13

如果查询中未包含ORDER BY子句,则返回的行顺序未定义.

虽然某些RDBMS在某些情况下会返回特定顺序的行,即使省略了ORDER BY子句,也绝不能依赖这种行为.


egg*_*yal 12

第20.2节<直接选择语句:多行>,SQL-92规范的 "一般规则"小节:

4) If an <order by clause> is not specified, then the ordering of
   the rows of Q is implementation-dependent.


Aar*_*and 9

如果您想订购,请加入ORDER BY.如果你不包含ORDER BY,你告诉SQL Server:

我不关心你返回行的顺序,只返回行

既然你不在乎,SQL服务器是要决定如何返回其认为将有可能是最有效的方式行权现在(或根据最后一次为这个特定查询的计划被缓存).因此,您不应该依赖于您观察到的行为.它可以从一次查询运行更改为下一次运行,包括数据更改,统计信息更改,索引更改,Service Pack,累积更新,升级等.等.