12 SQL Order By
阿新 • • 發佈:2020-06-25
1. 定義
維基百科:
Order By
可以根據一個或多個欄位對結果集排序。
2. 前言
本小節,我們將一起學習 SQL Order By
。
排序是非常常見的一個功能點,因此 SQL 提供了 Order By 來幫助開發者對結果集排序;Order By 預設按照升序排序,即ASC
,
我們還可以顯示指定排序為降序DESC
。
本小節測試資料如下,請先在資料庫中執行:
DROP TABLE IF EXISTS imooc_user;
CREATE TABLE imooc_user
(
username varchar(20),
age int
);
INSERT INTO imooc_user( username,age) VALUES('pedro',23), ('pedro',17), ('mike',18), ('jerry',28);
3. 單欄位排序
Order By 多用於根據單個欄位進行排序,即單欄位排序。
語法如下:
SELECT [col] FROM [table_name] ORDER BY [col] [DESC|ASC];
其中table_name
是資料表名,col
表示欄位名,[DESC|ASC]
表示可以選擇排序方式為降序(DESC)
或升序(ASC)
。
3.1 例1 升序排序 age 欄位
請書寫 SQL 語句,按照 age 欄位升序
查詢imooc_user
分析:
按照排序語法寫出語句即可。
語句:
SELECT username,age FROM imooc_user ORDER BY age;
結果如下:
+----------+-----+
| username | age |
+----------+-----+
| mike | 18 |
| pedro | 23 |
| jerry | 28 |
+----------+-----+
當然也可以顯示指定排序方式:
SELECT username,age FROM imooc_user ORDER BY age ASC;
3.2 例2 降序排序 age 欄位
請書寫 SQL 語句,按照 age 欄位降序
查詢imooc_user
表。
分析:
同上,只需改變排序方式為降序即可
。
語句:
SELECT username,age FROM imooc_user ORDER BY age DESC;
結果如下:
+----------+-----+
| username | age |
+----------+-----+
| jerry | 28 |
| pedro | 23 |
| mike | 18 |
+----------+-----+
4. 多欄位排序
Order By 還可用於多欄位排序。
語法如下:
SELECT [col] FROM [table_name] ORDER BY [col1] [DESC|ASC],[col2] [DESC|ASC];
其中table_name
是資料表名,col
表示欄位名,[DESC|ASC]
表示可以選擇排序方式為降序(DESC)
或升序(ASC)
,數字1、2表示多個欄位。
多欄位排序會優先以第一欄位排序後,再排序第二欄位。
4.1 例3 升序排序 username、age 欄位
請書寫 SQL 語句,按照username
和age
欄位均升序
查詢imooc_user
資料,。
分析:
只需將 Order By 後的單欄位改為雙欄位,且用,
分割即可。
語句:
SELECT username,age FROM imooc_user ORDER BY username, age;
結果如下:
+----------+-----+
| username | age |
+----------+-----+
| jerry | 28 |
| mike | 18 |
| pedro | 23 |
+----------+-----+
上面的語句中省略了排序方式,我們可以顯示指定排序方式:
SELECT username,age FROM imooc_user ORDER BY username ASC, age ASC;
4.2 例4 降序排序 username、升序排列 age
請書寫 SQL 語句,查詢imooc_user
資料,返回username
為降序
而age
為升序
的結果。
分析:
同上,改變 username 的排序即可。
語句:
SELECT username,age FROM imooc_user ORDER BY username DESC, age ASC;
結果如下:
+----------+-----+
| username | age |
+----------+-----+
| pedro | 23 |
| mike | 18 |
| jerry | 28 |
+----------+-----+
5. 小結
- Order By 可以有效讓查詢結果有序,這對於資料展示來說至關重要。
- Order By 對於多欄位的排序支援雖然強大,但是很消耗效能。
- Order By 對於字串的排序是按位(每個字元)進行比較排序的,十分耗時,一般情況下不推薦使用。