1. 程式人生 >基礎教學 >MYSQL入門教學 >23 ORDER BY 排序

23 ORDER BY 排序


前面小節介紹瞭如何查詢資料,並且介紹瞭如何使用 WHERE 條件對查詢的資料結果集進行篩選,本小節介紹如何使用 ORDER BY 對查詢結果集進行排序,排序在實際業務中非常有必要,可以較好地對結果集資料分析和處理。

1.ASC 從小到大排序

ASC是對結果集按照欄位從小到大排序(升序),以 teacher 表為例,將查詢出來的所有結果集按照年齡 age 從小到大排序:

 SELECT * FROM teacher ORDER BY age ASC;

執行結果如下圖:

23 ORDER BY 排序

2.DESC 從大到小排序

DESC是對結果集按照欄位從大到小排序(降序),以 teacher 表為例,將查詢出來的所有結果集按照年齡 id 從大到小排序:

 SELECT * FROM teacher ORDER BY id DESC;

執行結果如下圖:

23 ORDER BY 排序

3.使用多欄位混合排序

以 teacher 表為例,將查詢出來的結果集按照 age 從大到小排序之後,再按照 id 欄位從小到大排序:

SELECT * FROM teacher ORDER BY age DESC,id ASC;

執行結果如下圖:

23 ORDER BY 排序

4.對字串型別欄位排序

前面排序的 age 和 id 欄位是 int 型別,為了演示方便這裡先插入幾個 name 欄位為英文名的教師測試資料,並對 name 欄位排序,插入資料 SQL 語句如下:

INSERT INTO teacher
(name,age,id_number,email)
VALUES
('Tom',22,'42011720200604077X','[email protected]'),
('Jack',23,'42011720200604099X','[email protected]'),
('Mary',24,'42011720200604020X','[email protected]'),
('Timo',25,'42011720200604022X','[email protected]'),
('Faker',21,'42011720200604033X','[email protected]');

對查詢結果集按照 name 欄位 ASC 升序排序:

SELECT * FROM teacher ORDER BY name ASC;

執行結果如下圖:

23 ORDER BY 排序

Tips:如上圖所示,使用 ASC 對結果集按照 name 欄位升序,其實是對 name 欄位字串編碼的排序,英文字元排序在前,中文在後,其中排序規則是按照字元 ASCII碼 對應值的大小排序的。

5.小結

本小節介紹瞭如何使用 ORDER BY 對查詢結果集按照值欄位排序,其中包括 ASC 升序和 DESC 降序,需要注意的是各種資料的字符集可能不同,如中文字元編碼 GBK編碼、utf-8編碼, 若需要經常對字串型別欄位進行排序,可以給該字串欄位加上普通 Bree索引,二級索引樹字串預設儲存方式是按照字符集升序儲存的(Mysql8.0 可自定義排序儲存方式),所以有索引的欄位排序效能比沒有索引的欄位排序效能好。