MySQL必知應會-第5章-排序檢索資料

來源:互聯網
上載者:User

標籤:price   http   理論   apt   問題   利用   5.4   管理員   多資料庫   

第五章 排序檢索資料

本章將講授如何使用SELECT語句的ORDER BY子句,根據需要排序檢索出的資料。

5.1 排序資料

正如前一章所述,下面的SQL語句返回某個資料庫表的單個列。但請看其輸出,並沒有特定的順序。

其實,檢索出的資料並不是以純粹的隨機順序顯示的。如果不排序,資料一般將以它在底層表中出現的順序顯示。這可以是資料最初添加到表中的順序。但是,如果資料後來進行過更新或刪除,則此順序將會受到MySQL重用回收儲存空間的影響。因此,如果不明確控制的話,不能(也不應該)依賴該排序次序。關聯式資料庫設計理論認為,如果不明確規定排序次序,則不應該假定檢索出的資料的順序有意義。

子句(clause) SQL語句由子句構成,有些子句是必需的,而有的是可選的。一個子句通常由一個關鍵字和所提供的資料群組成。子句的例子有SELECT語句的FROM子句,我們在前一章看到過這個子句。為了明確地排序用SELECT語句檢索出的資料,可使用ORDER BY子句。ORDER BY子句取一個或多個列的名字,據此對輸出進行排序。請看下面的例子:

這條語句除了指示MySQL對prod_name列以字母順序排序資料的ORDER BY子句外,與前面的語句相同。
通過非選擇列進行排序 通常, ORDER BY子句中使用的列將是為顯示所選擇的列。但是,實際上並不一定要這樣,用非檢索的列排序資料是完全合法的。

5.2 按多個列排序

經常需要按不止一個列進行資料排序。例如,如果要顯示僱員清單,可能希望按姓和名排序(首先按姓排序,然後在每個姓中再按名排序)。如果多個僱員具有相同的姓,這樣做很有用。為了按多個列排序,只要指定列名,列名之間用逗號分開即可(就像選擇多個列時所做的那樣)。下面的代碼檢索3個列,並按其中兩個列對結果進行排序——首先按價格,然後再按名稱排序。

重要的是理解在按多個列排序時,排序完全按所規定的順序進行。換句話說,對於上述例子中的輸出,僅在多個行具有相同的prod_price值時才對產品按prod_name進行排序。如果prod_price列中所有的值都是唯一的,則不會按prod_name排序。

5.3 指定排序方向

資料排序不限於升序排序(從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之後。使用子句的次序不對將產生錯誤訊息。

5.4 小結

本章學習了如何用SELECT語句的ORDER BY子句對檢索出的資料進行排序。這個子句必須是SELECT語句中的最後一條子句。可根據需要,利用它在一個或多個列上對資料進行排序。

MySQL必知應會-第5章-排序檢索資料

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.