當我們撈到資料時,
往往會希望能將資料照某個欄位由大到小或是由小到大排序,
例如說班級通訊錄會照座號由小到大排序,
或是商業銷售報表會希望照銷售總額由大到小排序,
這時候就需要ORDER BY。
ORDER BY是排序語法,
一般會寫在句尾,
也就是當我們跟資料庫說「撈出性別是男生的資料」,
資料庫就會去撈,
撈完以後,我們再說「照座號排序」。
也就是:
先撈資料再排序,
畢竟沒撈出東西,哪來的資料排序?
對ORDER BY而言,預設是由小到大排序
如果有由大到小排序的需求,
或是想將語法寫得比較清楚,標示出由小到大,
就需要下面兩個語法
ASC 由小到大排序
DESC 由大到小排序
order by 通常會放在句尾,
也就是將資料選出後,才會進行排序,
order by 如果後面沒有特別寫DESC的話,
預設是從小到大(ASC)排序的。
語法
SELECT * FROM Education.student WHERE gender="F" ORDER BY start_date;
SELECT * FROM Education.student ORDER BY start_date DESC;
ORDER BY 可以用兩個欄位排序,
例如說國中月考,會說依照總分排名,
同分的話,就比作文成績,
這就是ORDER BY 總分,作文成績。
下面語法就是先照class排順序,再照開始日期排序。
SELECT * FROM Education.student ORDER BY class,start_date;
複合排序一樣可以加上DESC,
下面語法是先照class欄位由小到大排,
同class再照start_date從大到小排序。
SELECT * FROM Education.student ORDER BY class,start_date DESC;
從剛剛的粒子可以看到我們加了DESC,
但只作用在start_date上,
因為不同的變數ASC和DESC是分開寫的,
所以每個ORDER BY後面的欄位都可以加上ASC或是DESC,
如果沒有加的話,一樣預設是由小到大。
下面語法是先照class欄位由大到小排,
同class再照start_date從大到小排序。
SELECT * FROM Education.student ORDER BY class DESC,start_date DESC;
ORDER BY可以搭上昨天寫的LIMIT,
先排序,再指定要選幾行。
例如說選出所有的學生,
照class由大到小排序,
再用LIMIT選出排序後的第五個人後的一個人,
也就是排序後的第六個人。
SELECT * FROM Education.student ORDER BY class DESC,start_date DESC LIMIT 1 OFFSET 5;