说,我们有一个带有ID列(唯一值)和代码(非唯一)的表。没有插入/删除/更新操作,即它是一种常量。我们希望它按代码排序:
select ID, Code from T1 order by Code
所以我们得到类似的东西:
4 'a'
9 'a'
1 'b'
3 'b'
SQL标准或特定实现(然后是哪些)保证后续选择中的ID排序?我的意思是我们没有得到类似的东西:
9 'a'
4 'a'
1 'b'
3 'b'
答案 0 :(得分:5)
你可以这样保证:
select ID, Code from T1 order by Code, ID
答案 1 :(得分:2)
订单仅由ORDER BY
子句保证。您必须在该子句中添加另一列,以使结果可重复。
答案 2 :(得分:2)
SQL标准中没有指定的默认顺序。这意味着您的数据库引擎可以按照它选择的顺序自由返回行(很可能是最有效返回行的顺序)。
鉴于此表结构,行很可能以插入顺序返回或由主键排序,但如果没有指定ORDER BY
子句,则不能依赖它。
答案 3 :(得分:1)
如果数据库没有变化,那么您应该看到它们只是按照数据库中存在的顺序输出,如果没有插入/更新,DB没有理由重新排序记录。我不相信有任何保证,你可能会遇到一些情况,其中一些记录在内存缓存中,而某些记录可能无法改变顺序,具体取决于您所使用的特定数据库引擎使用
答案 4 :(得分:0)
只有在指定ORDER BY时才能保证行顺序。
您是否有需要保证订单的示例,但由于某种原因无法使用ORDER BY?
答案 5 :(得分:0)
您可以对两个列使用自己的排序
select id, code from t1 order by code asc, id asc
无论如何,Altough默认是提升,但是我已明确提到要显示您可以单独指定两个列的顺序为asc or desc