H2极限和补偿,订购是否有保证?

时间:2018-06-29 16:46:42

标签: sql h2

使用LIMIT和OFFSET时,每个这样的语句将以相同的方式对输入进行排序的保证是什么? 为了说明:

 *price* | *product*
---------------------
  2.99   | party hat green
  2.99   | party hat pink
  3.99   | red ball
  3.99   | blue ball
  3.99   | yellow ball

如果:

SELECT FROM toys ORDER BY price ASC LIMIT 3;

返回:

 *price* | *product*
---------------------
  2.99   | party hat green
  2.99   | party hat pink
  3.99   | red ball

我可以确定下一个查询:

SELECT FROM toys ORDER BY price ASC LIMIT 3 OFFSET 3;

返回:

 *price* | *product*
---------------------
  3.99   | blue ball
  3.99   | yellow ball

毕竟,所有三个球都有相同的价格,所以三行的任何排序都是有效的。

1 个答案:

答案 0 :(得分:2)

如果存在ORDER BY,则数据库可以自由地以任何顺序返回相等的行(根据排序标准),并且该顺序可能随时间而改变。

在您的示例中,如果要按特定顺序排列行,只需指定它即可。也许:

SELECT FROM toys ORDER BY price, product LIMIT 3;

如果未指定ORDER BY,数据库将不按特定顺序返回行。根据SQL定义,数据库可以随意返回行。这些行的顺序也可能随时间变化。