我有一个表,它只有一列varchar.
我想得到最后一排,但我无法申请order by.
以下查询未提供所需结果.
select top 1 from SampleTbl order by columnName desc
Run Code Online (Sandbox Code Playgroud)
数据库表本质上是未分类的.表中没有最后一行.
如果存在聚簇索引,则记录的存储顺序与聚簇索引的顺序相同,但这并不意味着行的顺序 - 除非order by在查询中指定子句,否则没有数据库保证返回的行的顺序通过所述查询.
从维基百科页面上的表格(强调我的):
就数据库的关系模型而言,表可以被认为是关系的方便表示,但两者并不是严格等同的.例如,SQL表可能包含重复的行,而true关系不能包含重复的元组.类似地,表示为表意味着对行和列的特定排序,而关系明确地是无序的.但是,除非在查询表的SELECT语句中指定了ORDER BY子句,否则数据库系统不保证行的任何排序.
另请参阅Aaron Betrand的糟糕习惯:依靠无证行为,标题为"没有ORDER BY订购"的段落:
...我想说清楚:除非你使用ORDER BY子句,否则排序是任意的.在没有ORDER BY的情况下,您永远不应该依赖于在查询中观察到的顺序 - 如果您真的不关心结果返回的顺序,那么您应该只发出没有ORDER BY子句的查询.在这种情况下,您可以想象每次行都会以不同的随机顺序返回,即使事实并非如此(随机具有完全独立于任意的含义,但就像我说的那样,想象一下).