1. 程式人生 > >sqlserver中order by 排序用法

sqlserver中order by 排序用法

ORDER BY 語句用於根據指定的列對結果集進行排序,ORDER BY 語句預設按照升序對記錄進行排序,如果您希望按照降序對記錄進行排序,可以使用 DESC 關鍵字。

排序可以是升序的 (ASC),也可以是降序的 (DESC)。如果未指定是升序還是降序,就假定為 ASC。

下面的查詢返回按 ProductID 升序排序的結果:

 程式碼如下 複製程式碼

 USE AdventureWorks2008R2;
GO
SELECT ProductID, ProductLine, ProductModelID
FROM Production.Product
ORDER BY ProductID;

如果 ORDER BY 子句中指定了多個列,則排序是巢狀的。下面的語句先按產品子類別降序排序 Production.Product 表中的行,然後在每個產品子類別中按 ListPrice 升序排序這些行。

 程式碼如下 複製程式碼
 USE AdventureWorks2008R2;
GO
SELECT ProductID, ProductSubcategoryID, ListPrice
FROM Production.Product
ORDER BY ProductSubcategoryID DESC, ListPrice;


問題

同一個查詢的結果集為什麼有時候是按他想要的順序排列,有時候又不是,或者是在SQL2000裡是這個順序,到了SQL2005/2008又是那個順序?

其實,只要語句裡沒有指定“order by”,SQLSERVER並不會按照順序返回的。有可能你的表裡有一個欄位已經建立了索引

你想結果集按照那個建立了索引的欄位排序,那麼你不指定“order by”是沒有問題的,因為表的儲存順序就是按照那個欄位

的順序排好序了,所以可以不指定“order by”,但是如果你沒有在想排序的那個欄位建立索引,或者在SQL2000裡建立了

索引,而在SQL2005/2008裡沒有建立索引,那麼就要明確地用“order by”指定。如果你沒有指定,哪怕一模一樣的查詢,

結果集順序這一次和上一次不一樣是很正常的。