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
或未定义行为?
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
或未定义行为?
确保Bob
将成为结果集的最后一行。其他行的相对顺序不能以任何方式保证。
如果你需要保证排序,那么你需要明确它。例如:
SELECT *
FROM table
ORDER BY age DESC,
name ASC
ORDER BY Age DESC, Name [ASC|DESC]
如果省略ORDER BY
子句,优化器将决定你的订单。根据我的经验,通常是但是数据是在磁盘上订购的。如果有聚集索引(通常是主键),它将是它的顺序。 但是,正如@Martin指出的那样,这是不能保证的。如果你想要一个特定的订单,请指定它。
这没有定义或保证。 – 2010-10-18 14:48:50
@Martin,你是对的。我修改了我的答案以反映您的意见。 – Brad 2010-10-18 14:55:33
select * from table
ORDER BY Age DESC , name asc
如果您发布代码或XML,**请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码”按钮(101 010),以良好地格式化和语法突出显示它! – 2010-10-18 15:07:30
这并没有回答这个问题 - 如果你没有指定“名称”作为ORDER BY条件 - 是以某种方式定义的顺序 - 或不是? – 2010-10-18 15:07:52
最终的结果并不是按照您预期的结果进行的任何定义的顺序。
正如它向我解释的那样,在没有指定的时候,不要依赖返回行的顺序。 – Jay 2010-10-18 14:50:07
如果您需要订单 - 请具体说明。如果没有指定,则不能保证/定义。 – 2010-10-18 15:09:32