排序資料
其實,檢索出的資料并不是以純粹的隨機順序顯示的,如果不排
序,資料一般將以它在底層表中出現的順序顯示,這可以是資料最初
添加到表中的順序,但是,如果資料后來進行過更新或洗掉,則此順
序將會受到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 陳述句中的最后一條子句,可根據需要,利
用它在一個或多個列上對資料進行排序
之后,使用子句的次序不對將產生錯誤訊息
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/86042.html
標籤:MySQL
