23 ORDER BY 排序
阿新 • • 發佈:2020-06-25
前面小節介紹瞭如何查詢資料,並且介紹瞭如何使用 WHERE 條件對查詢的資料結果集進行篩選,本小節介紹如何使用 ORDER BY 對查詢結果集進行排序,排序在實際業務中非常有必要,可以較好地對結果集資料分析和處理。
1.ASC 從小到大排序
ASC
是對結果集按照欄位從小到大排序(升序),以 teacher 表為例,將查詢出來的所有結果集按照年齡 age
從小到大排序:
SELECT * FROM teacher ORDER BY age ASC;
執行結果如下圖:
2.DESC 從大到小排序
DESC
是對結果集按照欄位從大到小排序(降序),以 teacher 表為例,將查詢出來的所有結果集按照年齡 id
SELECT * FROM teacher ORDER BY id DESC;
執行結果如下圖:
3.使用多欄位混合排序
以 teacher 表為例,將查詢出來的結果集按照 age
從大到小排序之後,再按照 id
欄位從小到大排序:
SELECT * FROM teacher ORDER BY age DESC,id ASC;
執行結果如下圖:
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;
執行結果如下圖:
Tips:如上圖所示,使用
ASC
對結果集按照name
欄位升序,其實是對name
欄位字串編碼的排序,英文字元排序在前,中文在後,其中排序規則是按照字元ASCII碼
對應值的大小排序的。
5.小結
本小節介紹瞭如何使用 ORDER BY 對查詢結果集按照值欄位排序,其中包括 ASC
升序和 DESC
降序,需要注意的是各種資料的字符集可能不同,如中文字元編碼 GBK編碼
、utf-8編碼
, 若需要經常對字串型別欄位進行排序,可以給該字串欄位加上普通 Bree索引
,二級索引樹字串預設儲存方式是按照字符集升序儲存的(MySQL8.0 可自定義排序儲存方式),所以有索引的欄位排序效能比沒有索引的欄位排序效能好。