SQL Order By
1. 定義
維基百科:
Order By
可以根據(jù)一個(gè)或多個(gè)字段對結(jié)果集排序。
2. 前言
本小節(jié),我們將一起學(xué)習(xí) SQL Order By
。
排序是非常常見的一個(gè)功能點(diǎn),因此 SQL 提供了 Order By 來幫助開發(fā)者對結(jié)果集排序;Order By 默認(rèn)按照升序排序,即ASC
,
我們還可以顯示指定排序?yàn)榻敌?code>DESC。
本小節(jié)測試數(shù)據(jù)如下,請先在數(shù)據(jù)庫中執(zhí)行:
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 多用于根據(jù)單個(gè)字段進(jìn)行排序,即單字段排序。
語法如下:
SELECT [col] FROM [table_name] ORDER BY [col] [DESC|ASC];
其中table_name
是數(shù)據(jù)表名,col
表示字段名,[DESC|ASC]
表示可以選擇排序方式為降序(DESC)
或升序(ASC)
。
3.1 例1 升序排序 age 字段
請書寫 SQL 語句,按照 age 字段升序
查詢imooc_user
表。
分析:
按照排序語法寫出語句即可。
語句:
SELECT username,age FROM imooc_user ORDER BY age;
結(jié)果如下:
+----------+-----+
| username | age |
+----------+-----+
| mike | 18 |
| pedro | 23 |
| jerry | 28 |
+----------+-----+
當(dāng)然也可以顯示指定排序方式:
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;
結(jié)果如下:
+----------+-----+
| 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
是數(shù)據(jù)表名,col
表示字段名,[DESC|ASC]
表示可以選擇排序方式為降序(DESC)
或升序(ASC)
,數(shù)字1、2表示多個(gè)字段。
多字段排序會優(yōu)先以第一字段排序后,再排序第二字段。
4.1 例3 升序排序 username、age 字段
請書寫 SQL 語句,按照username
和age
字段均升序
查詢imooc_user
數(shù)據(jù),。
分析:
只需將 Order By 后的單字段改為雙字段,且用,
分割即可。
語句:
SELECT username,age FROM imooc_user ORDER BY username, age;
結(jié)果如下:
+----------+-----+
| 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
數(shù)據(jù),返回username
為降序
而age
為升序
的結(jié)果。
分析:
同上,改變 username 的排序即可。
語句:
SELECT username,age FROM imooc_user ORDER BY username DESC, age ASC;
結(jié)果如下:
+----------+-----+
| username | age |
+----------+-----+
| pedro | 23 |
| mike | 18 |
| jerry | 28 |
+----------+-----+
5. 小結(jié)
- Order By 可以有效讓查詢結(jié)果有序,這對于數(shù)據(jù)展示來說至關(guān)重要。
- Order By 對于多字段的排序支持雖然強(qiáng)大,但是很消耗性能。
- Order By 對于字符串的排序是按位(每個(gè)字符)進(jìn)行比較排序的,十分耗時(shí),一般情況下不推薦使用。