其實,檢索出的數據並非以純粹的隨機順序顯示的。若是不排
序,數據通常將以它在底層表中出現的順序顯示。這能夠是數據最初
添加到表中的順序。可是,若是數據後來進行過更新或刪除,則此順
序將會受到MySQL重用回收存儲空間的影響。所以,若是不明確控
制的話,不能(也不該該)依賴該排序順序。關係數據庫設計理論認
爲,若是不明確規定排序順序,則不該該假定檢索出的數據的順序有
意義。數據庫
子句(clause) SQL語句由子句構成,有些子句是必需的,而
有的是可選的。一個子句一般由一個關鍵字和所提供的數據組
成。子句的例子有 SELECT 語句的 FROM 子句數據庫設計
爲了明確地排序用 SELECT 語句檢索出的數據,可以使用 ORDER BY 子句。
ORDER BY 子句取一個或多個列的名字,據此對輸出進行排序學習
經過非選擇列進行排序 一般, ORDER BY 子句中使用的列將
是爲顯示所選擇的列。可是,實際上並不必定要這樣,用非
檢索的列排序數據是徹底合法的設計
常常須要按不止一個列進行數據排序。例如,若是要顯示僱員清單,
可能但願按姓和名排序(首先按姓排序,而後在每一個姓中再按名排序)。
若是多個僱員具備相同的姓,這樣作頗有用。
爲了按多個列排序,只要指定列名,列名之間用逗號分開便可(就
像選擇多個列時所作的那樣)。
重要的是理解在按多個列排序時,排序徹底按所規定的順序進行。3d
數據排序不限於升序排序(從 A 到 Z )。這只是默認的排序順序,還可
以使用 ORDER BY 子句以降序(從 Z 到 A )順序排序。爲了進行降序排序,
必須指定 DESC 關鍵字blog
可是,若是打算用多個列排序怎麼辦?下面的例子以降序排序產品
(最貴的在最前面),而後再對產品名排序
排序
DESC 關鍵字只應用到直接位於其前面的列名。在上例中,只對
prod_price 列指定 DESC ,對 prod_name 列不指定。所以,
prod_price 列以降序排序,而 prod_name 列(在每一個價格內)仍然按標準
的升序排序。產品
在多個列上降序排序 若是想在多個列上進行降序排序,必須
對每一個列指定 DESC 關鍵字
與 DESC 相反的關鍵字是 ASC ( ASCENDING ),在升序排序時能夠指定它。
但實際上, ASC 沒有多大用處,由於升序是默認的(若是既不指定 ASC 也
不指定 DESC ,則假定爲 ASC )io
區分大小寫和排序順序 在對文本性的數據進行排序時,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 語句中的最後一條子句。可根據須要,利 用它在一個或多個列上對數據進行排序 以後。使用子句的次序不對將產生錯誤消息