使用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
毕竟,所有三个球都有相同的价格,所以三行的任何排序都是有效的。
答案 0 :(得分:2)
如果存在ORDER BY
,则数据库可以自由地以任何顺序返回相等的行(根据排序标准),并且该顺序可能随时间而改变。
在您的示例中,如果要按特定顺序排列行,只需指定它即可。也许:
SELECT FROM toys ORDER BY price, product LIMIT 3;
如果未指定ORDER BY
,数据库将不按特定顺序返回行。根据SQL定义,数据库可以随意返回行。这些行的顺序也可能随时间变化。