備戰2022春招或暑期實習,本專欄會持續輸出MySQL系列文章,祝大家每天進步億點點!文末私信作者,我們一起去大廠。
本篇總結的是 《order by使用》,後續會每日更新~
關于《Redis入門到精通》、《并發程式設計》、《Java全面入門》、《鴻蒙開發》等知識點可以參考我的往期部落格
相信自己,越活越堅強,活着就該逢山開路,遇水架橋!生活,你給我壓力,我還你奇迹!

目錄
1、簡介
2、正文
2.1 單個列排序
2.2 多個列排序
2.3 排序的方式
2.4 order by結合limit
在使用select語句時可以結合order by對查詢的資料進行排序。如果不使用order by預設情況下MySQL傳回的資料集,與它在底層表中的順序相同,可能與你添加資料到表中的順序一緻,也可能不一緻(在你對表進行修改、删除等操作時MySQL會對記憶體進行整理,此時資料的順序會發生改變)是以如果我們希望得到的資料是有順序的,就應該明确排序方式。
首先準備一張User表,DDL和表資料如下所示,可以直接複制使用。
我們首先來看使用order by對單個列進行排序。
需求:
根據使用者年齡進行升序排序。
語句:
分析:
可以看到user表輸出順序按照age升序排序輸出,是以可以猜測MySQL預設的排序方式是升序。此外我這裡使用*通配符查詢所有列,并未明确指明查詢age列;其實MySQL的order by後跟的列不一定要查詢出來,比如 select name from user order by age;這樣也是一樣的效果。
order by不僅可以對單個列進行排序,它也可以對多個列進行排序,隻需要把需要排序的列依次跟在order by之後就可以了。
在測試之前,我們先往表中添加一條年齡相等的資料
根據使用者年齡升序排序之後再更加使用者名稱排序。
order by可以作用于多個列,MySQL會完全根據order by後列的順序進行排序。不過MySQL對于中文的排序需要考慮資料庫字元集編碼的問題,如果不是很懂建議不要對中文進行排序,因為大多數情況我們需要得到的是拼音的排序結果,但是往往不盡人意哦!此外這裡我們在age和name後都是沒有跟排序方式的,是以預設都是升序,先根據age升序排序之後再根據name升序排序。如果需要使用降序,則需要指明DESC,比如 select id, name, age from user order by age, name desc;。
order by有兩種排序方式,它們分别是:
ASC -> 升序排序(預設排序方式)
DESC -> 降序排序
注意:在上面說了order by對多個列進行排序,排序方式隻會作用于一個列,比如你需要對user表中的資料同時按照age和name進行降序,就應該兩個列都指明降序。
mysql> select * from user limit 1 order by age des;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order by age des' at line 1