MySQL 排序檢索資料

2021-10-17 11:05:52 字數 2911 閱讀 7865

本文將講授如何使用select語句的order by子句,根據需要排序檢索出的資料。

下面的sql語句返回某個資料庫表的單個列。但請看其輸出,並沒有特定的順序。

其實,檢索出的資料並不是以純粹的隨機順序顯示的。如果不排序,資料一般將以它在底層表**現的順序顯示。這可以是資料最初新增到表中的順序。

但是,如果資料後來進行過更新或刪除,則此順序將會受到mysql重用**儲存空間的影響。因此,如果不明確控制的話,不能(也不應該)依賴該排序順序。關聯式資料庫設計理論認為,如果不明確規定排序順序,則不應該假定檢索出的資料的順序有意義。

子句(clause)sql語句由子句構成,有些子句是必需的,而有的是可選的。乙個子句通常由乙個關鍵字和所提供的資料組成。子句的例子有select語句的from子句。

為了明確地排序用select語句檢索出的資料,可使用order by子句。order by子句取乙個或多個列的名字,據此對輸出進行排序。請看下面的例子:

select prod_name from products order

by prod_name;

這條語句除了指示mysql對prod_name列以字母順序排序資料的order by子句外,與前面的語句相同。說明預設以字母順序排序。

通過非選擇列進行排序通常, order by子句中使用的列將是為顯示所選擇的列。但是,實際上並不一定要這樣,用非檢索的列排序資料是完全合法的。

經常需要按不止乙個列進行資料排序。例如,如果要顯示雇員清單,可能希望按姓和名排序(首先按姓排序,然後在每個姓中再按名排序)。

如果多個雇員具有相同的姓,這樣做很有用。

為了按多個列排序,只要指定列名,列名之間用逗號分開即可(就像選擇多個列時所做的那樣)。

面的**檢索3個列,並按其中兩個列對結果進行排序——首先按**,然後再按名稱排序。預設是公升序排序

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

資料排序不限於公升序排序(從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的組合,能夠找出乙個列中最高或最低的值。下面的例子演示如何找出最昂貴物品的值:

select prod_price from products order

by prod_price desc

limit

1;

rod_price desc保證行是按照由最昂貴到最便宜檢索的,而limit 1告訴mysql僅返回一行。

注意:order by子句的位置 在給出order by子句時,應該保證它位於from子句之後。如果使用limit,它必須位於order by之後。使用子句的次序不對將產生錯誤訊息。

mysql 資料排序檢索

關聯式資料庫設計理論認為,如果沒有明確規定排序順序,則不應該假定檢索出的資料的順序有意義。可以使用order by對輸出進行排序。select prod name from products order by prod name 使用非選擇列排序通常使用被選擇的列進行排序,但也可以使用其他列作為排序...

mysql怎麼排序檢索 mysql排序檢索資料

1 排序資料 select 表的欄位名 from 對應的表名 order by 表的欄位名 2 按多個列排序 select 表的欄位名,表的欄位名,表的欄位名,from 對應的表名 order by 表的欄位名,表的欄位名,表的欄位名,如果表的字段中的值是唯一的,則按照該欄位進行排序就可以了 3 指...

MySQL之排序檢索資料

1 排序資料 select prod name from products order by product name 表示按字母順序公升序排列,輸出prod name。2 按多個列排序 select prod id,prod price,prod name from products order ...