sqlserver中order by 排序用法
阿新 • • 發佈:2019-01-24
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”指定。如果你沒有指定,哪怕一模一樣的查詢,
結果集順序這一次和上一次不一樣是很正常的。