1. 程式人生 > SQL入門教學 >12 SQL Order By

12 SQL Order By

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 語句,按照usernameage欄位均升序查詢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 對於字串的排序是按位(每個字元)進行比較排序的,十分耗時,一般情況下不推薦使用。