排序數據 其實,檢索出的數據並不是以純粹的隨機順序顯示的。如果不排 序,數據一般將以它在底層表中出現的順序顯示。這可以是數據最初 添加到表中的順序。但是,如果數據後來進行過更新或刪除,則此順 序將會受到MySQL重用回收存儲空間的影響。因此,如果不明確控 制的話,不能(也不應該)依賴該排序順序。關係 ...
排序數據
其實,檢索出的數據並不是以純粹的隨機順序顯示的。如果不排
序,數據一般將以它在底層表中出現的順序顯示。這可以是數據最初
添加到表中的順序。但是,如果數據後來進行過更新或刪除,則此順
序將會受到MySQL重用回收存儲空間的影響。因此,如果不明確控
制的話,不能(也不應該)依賴該排序順序。關係資料庫設計理論認
為,如果不明確規定排序順序,則不應該假定檢索出的數據的順序有
意義。
子句(clause) SQL語句由子句構成,有些子句是必需的,而
有的是可選的。一個子句通常由一個關鍵字和所提供的數據組
成。子句的例子有 SELECT 語句的 FROM 子句
為了明確地排序用 SELECT 語句檢索出的數據,可使用 ORDER BY 子句。
ORDER BY 子句取一個或多個列的名字,據此對輸出進行排序
通過非選擇列進行排序 通常, ORDER BY 子句中使用的列將
是為顯示所選擇的列。但是,實際上並不一定要這樣,用非
檢索的列排序數據是完全合法的
按多個列排序
經常需要按不止一個列進行數據排序。例如,如果要顯示雇員清單,
可能希望按姓和名排序(首先按姓排序,然後在每個姓中再按名排序)。
如果多個雇員具有相同的姓,這樣做很有用。
為了按多個列排序,只要指定列名,列名之間用逗號分開即可(就
像選擇多個列時所做的那樣)。
重要的是理解在按多個列排序時,排序完全按所規定的順序進行。
指定排序方向
數據排序不限於升序排序(從 A 到 Z )。這隻是預設的排序順序,還可
以使用 ORDER BY 子句以降序(從 Z 到 A )順序排序。為了進行降序排序,
必須指定 DESC 關鍵字
但是,如果打算用多個列排序怎麼辦?下麵的例子以降序排序產品
(最貴的在最前面),然後再對產品名排序
DESC 關鍵字只應用到直接位於其前面的列名。在上例中,只對
prod_price 列指定 DESC ,對 prod_name 列不指定。因此,
prod_price 列以降序排序,而 prod_name 列(在每個價格內)仍然按標準
的升序排序。
在多個列上降序排序 如果想在多個列上進行降序排序,必須
對每個列指定 DESC 關鍵字
與 DESC 相反的關鍵字是 ASC ( ASCENDING ),在升序排序時可以指定它。
但實際上, ASC 沒有多大用處,因為升序是預設的(如果既不指定 ASC 也
不指定 DESC ,則假定為 ASC )
區分大小寫和排序順序 在對文本性的數據進行排序時,A與
a相同嗎?a位於B之前還是位於Z之後?這些問題不是理論問
題,其答案取決於資料庫如何設置。
在字典(dictionary)排序順序中,A被視為與a相同,這是MySQL
(和大多數資料庫管理系統)的預設行為。但是,許多資料庫
管理員能夠在需要時改變這種行為(如果你的資料庫包含大量
外語字元,可能必須這樣做)。
這裡,關鍵的問題是,如果確實需要改變這種排序順序,用簡
單的 ORDER BY 子句做不到。你必須請求資料庫管理員的幫助
使用 ORDER BY 和 LIMIT 的組合,能夠找出一個列中最高或最低的值。
下麵的例子演示如何找出最昂貴物品的值:
prod_price DESC 保證行是按照由最昂貴到最便宜檢索的,而
LIMIT 1 告訴MySQL僅返回一行。
ORDER BY 子句的位置 在給出 ORDER BY 子句時,應該保證它
位於 FROM 子句之後。如果使用 LIMIT ,它必須位於 ORDER BY
本章學習瞭如何用 SELECT 語句的 ORDER BY 子句對檢索出的數據進行
排序。這個子句必須是 SELECT 語句中的最後一條子句。可根據需要,利
用它在一個或多個列上對數據進行排序
之後。使用子句的次序不對將產生錯誤消息