2010-10-18 82 views
2

鉴于TSQL,ORDER的排序方式

 
Name Age 
Bob 30 
Paul 35 
John 35 

一张桌子和一个声明

select * from table ORDER BY Age DESC 

什么是结果表的顺序?

 
Name Age 
Paul 35 
John 35 
Bob 30 

 
Name Age 
John 35 
Paul 35 
Bob 30 

或未定义行为?

+2

正如它向我解释的那样,在没有指定的时候,不要依赖返回行的顺序。 – Jay 2010-10-18 14:50:07

+0

如果您需要订单 - 请具体说明。如果没有指定,则不能保证/定义。 – 2010-10-18 15:09:32

回答

7

确保Bob将成为结果集的最后一行。其他行的相对顺序不能以任何方式保证。

如果你需要保证排序,那么你需要明确它。例如:

SELECT * 
FROM table 
ORDER BY age DESC, 
     name ASC 
2

ORDER BY Age DESC, Name [ASC|DESC]

如果省略ORDER BY子句,优化器将决定你的订单。根据我的经验,通常是但是数据是在磁盘上订购的。如果有聚集索引(通常是主键),它将是它的顺序。 但是,正如@Martin指出的那样,这是不能保证的。如果你想要一个特定的订单,请指定它。

+6

这没有定义或保证。 – 2010-10-18 14:48:50

+1

@Martin,你是对的。我修改了我的答案以反映您的意见。 – Brad 2010-10-18 14:55:33

0
select * from table 
ORDER BY Age DESC , name asc 
+0

如果您发布代码或XML,**请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码”按钮(101 010),以良好地格式化和语法突出显示它! – 2010-10-18 15:07:30

+0

这并没有回答这个问题 - 如果你没有指定“名称”作为ORDER BY条件 - 是以某种方式定义的顺序 - 或不是? – 2010-10-18 15:07:52

0

最终的结果并不是按照您预期的结果进行的任何定义的顺序。