
- SQL 教程
- SQL - 首頁
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 資料庫
- SQL - 語法
- SQL - 資料型別
- SQL - 運算子
- SQL - 表示式
- SQL 資料庫
- SQL - 建立資料庫
- SQL - 刪除資料庫
- SQL - 選擇資料庫
- SQL - 重新命名資料庫
- SQL - 顯示資料庫
- SQL - 備份資料庫
- SQL 表
- SQL - 建立表
- SQL - 顯示錶
- SQL - 重命名錶
- SQL - 清空表
- SQL - 克隆表
- SQL - 臨時表
- SQL - 修改表
- SQL - 刪除表
- SQL - 刪除表
- SQL - 約束
- SQL 查詢
- SQL - INSERT 查詢
- SQL - SELECT 查詢
- SQL - SELECT INTO
- SQL - INSERT INTO SELECT
- SQL - UPDATE 查詢
- SQL - DELETE 查詢
- SQL - 排序結果
- SQL 檢視
- SQL - 建立檢視
- SQL - 更新檢視
- SQL - 刪除檢視
- SQL - 重新命名檢視
- SQL 運算子和子句
- SQL - WHERE 子句
- SQL - TOP 子句
- SQL - DISTINCT 子句
- SQL - ORDER BY 子句
- SQL - GROUP BY 子句
- SQL - HAVING 子句
- SQL - AND & OR
- SQL - 布林 (BIT) 運算子
- SQL - LIKE 運算子
- SQL - IN 運算子
- SQL - ANY, ALL 運算子
- SQL - EXISTS 運算子
- SQL - CASE
- SQL - NOT 運算子
- SQL - 不等於
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 運算子
- SQL - UNION 運算子
- SQL - UNION vs UNION ALL
- SQL - INTERSECT 運算子
- SQL - EXCEPT 運算子
- SQL - 別名
- SQL 連線
- SQL - 使用連線
- SQL - INNER JOIN
- SQL - LEFT JOIN
- SQL - RIGHT JOIN
- SQL - CROSS JOIN
- SQL - FULL JOIN
- SQL - 自連線
- SQL - DELETE JOIN
- SQL - UPDATE JOIN
- SQL - LEFT JOIN vs RIGHT JOIN
- SQL - UNION vs JOIN
- SQL 金鑰
- SQL - UNIQUE KEY
- SQL - PRIMARY KEY
- SQL - FOREIGN KEY
- SQL - 組合鍵
- SQL - 備選鍵
- SQL 索引
- SQL - 索引
- SQL - 建立索引
- SQL - 刪除索引
- SQL - 顯示索引
- SQL - UNIQUE INDEX
- SQL - 聚簇索引
- SQL - 非聚簇索引
- 高階 SQL
- SQL - 萬用字元
- SQL - 註釋
- SQL - 注入
- SQL - 託管
- SQL - MIN & MAX
- SQL - NULL 函式
- SQL - CHECK 約束
- SQL - DEFAULT 約束
- SQL - 儲存過程
- SQL - NULL 值
- SQL - 事務
- SQL - 子查詢
- SQL - 處理重複項
- SQL - 使用序列
- SQL - 自動遞增
- SQL - 日期和時間
- SQL - 遊標
- SQL - 公共表表達式
- SQL - GROUP BY vs ORDER BY
- SQL - IN vs EXISTS
- SQL - 資料庫調優
- SQL 函式參考
- SQL - 日期函式
- SQL - 字串函式
- SQL - 聚合函式
- SQL - 數值函式
- SQL - 文字和影像函式
- SQL - 統計函式
- SQL - 邏輯函式
- SQL - 遊標函式
- SQL - JSON 函式
- SQL - 轉換函式
- SQL - 資料型別函式
- SQL 有用資源
- SQL - 問答
- SQL - 快速指南
- SQL - 有用函式
- SQL - 有用資源
- SQL - 討論
SQL - ORDER BY 子句
SQL ORDER BY 子句
SQL 的ORDER BY子句用於根據一個或多個列對資料進行升序或降序排序。此子句可以按單個列或多個列排序資料。當您需要分層排序資料(例如按州、城市,然後按人員姓名排序)時,按多個列排序非常有用。
ORDER BY 用於 SQL SELECT 語句,通常在 WHERE、HAVING 和 GROUP BY 子句之後指定。
以下是關於 ORDER BY 子句的重要要點:
- 某些資料庫預設按升序排序查詢結果。
- 要按升序排序資料,我們使用關鍵字ASC。
- 要按降序排序資料,我們使用關鍵字DESC。
除了按升序或降序排序記錄外,ORDER BY 子句還可以按首選順序對資料庫表中的資料進行排序。
此首選順序可能不會按任何標準順序(如字母順序或詞法順序)對錶的記錄進行排序,但它們可以根據外部條件進行排序。
例如,在包含組織客戶詳細資訊的 CUSTOMERS 表中,可以根據他們所在城市的居民人口對記錄進行排序。這不需要按字母順序排序,而是需要使用CASE語句手動定義順序。
語法
ORDER BY 子句的基本語法如下:
SELECT column-list FROM table_name [ORDER BY column1, column2, .. columnN] [ASC | DESC];
其中,column-list 是我們要檢索的列的列表;ASC 或 DESC 指定排序順序。
注意:我們可以在 ORDER BY 子句中使用多個列,但是我們需要確保我們用於排序的列在 column-list 中指定。
帶有 ASC 的 ORDER BY 子句
我們可以透過指定ASC作為排序順序,使用SQL ORDER BY子句按升序(基於一個或多個列)對查詢的結果集進行排序。ASC 是此子句的預設排序順序,即在使用 ORDER BY 子句時,如果您沒有顯式指定排序順序,則資料將按升序排序。
示例
假設我們已使用 CREATE TABLE 語句在 MySQL 資料庫中建立了一個名為 CUSTOMERS 的表,如下所示:
CREATE TABLE CUSTOMERS ( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
以下查詢使用 INSERT 語句將值插入此表:
insert INTO CUSTOMERS VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00), (2, 'Khilan', 25, 'Delhi', 1500.00), (3, 'Kaushik', 23, 'Kota', 2000.00), (4, 'Chaitali', 25, 'Mumbai', 6500.00), (5, 'Hardik', 27, 'Bhopal', 8500.00), (6, 'Komal', 22, 'Hyderabad', 4500.00), (7, 'Muffy', 24, 'Indore', 10000.00);
獲得的表如下所示:
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 32 | 艾哈邁達巴德 | 2000.00 |
2 | Khilan | 25 | 德里 | 1500.00 |
3 | Kaushik | 23 | 科塔 | 2000.00 |
4 | Chaitali | 25 | 孟買 | 6500.00 |
5 | Hardik | 27 | 博帕爾 | 8500.00 |
6 | Komal | 22 | 海得拉巴 | 4500.00 |
7 | Muffy | 24 | 因多爾 | 10000.00 |
在以下查詢中,我們根據列 NAME 按升序對 CUSTOMERS 表的記錄進行排序:
SELECT * FROM CUSTOMERS ORDER BY NAME ASC;
輸出
這將產生以下結果:
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
4 | Chaitali | 25 | 孟買 | 6500.00 |
5 | Hardik | 27 | 博帕爾 | 8500.00 |
3 | Kaushik | 23 | 科塔 | 2000.00 |
2 | Khilan | 25 | 德里 | 1500.00 |
6 | Komal | 22 | 海得拉巴 | 4500.00 |
7 | Muffy | 24 | 因多爾 | 10000.00 |
1 | Ramesh | 32 | 艾哈邁達巴德 | 2000.00 |
帶有 DESC 的 ORDER BY 子句
要按降序(基於一個或多個列)對查詢的結果集進行排序,我們需要使用 ORDER BY 子句,並指定 DESC 作為排序順序。
示例
以下查詢根據客戶名稱的降序對 CUSTOMER 表的記錄進行排序:
SELECT * FROM CUSTOMERS ORDER BY NAME DESC;
輸出
這將產生以下結果:
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 32 | 艾哈邁達巴德 | 2000.00 |
7 | Muffy | 24 | 因多爾 | 10000.00 |
6 | Komal | 22 | 海得拉巴 | 4500.00 |
2 | Khilan | 25 | 德里 | 1500.00 |
3 | Kaushik | 23 | 科塔 | 2000.00 |
5 | Hardik | 27 | 博帕爾 | 8500.00 |
4 | Chaitali | 25 | 孟買 | 6500.00 |
多列 ORDER BY 子句
我們可以使用 ORDER BY 子句按多個(多於一個)列對查詢的結果集進行排序。當按多個列排序時,排序按 ORDER BY 子句中指定的順序進行。換句話說,表將根據第一列(在查詢中指定)進行排序,然後是第二列,依此類推。
示例
在以下查詢中,我們從 CUSTOMERS 表中檢索所有記錄,並首先按其地址升序排序,然後按其薪水降序排序:
SELECT * FROM CUSTOMERS ORDER BY AGE ASC, SALARY DESC;
輸出
以下是產生的結果:
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
6 | Komal | 22 | 海得拉巴 | 4500.00 |
3 | Kaushik | 23 | 科塔 | 2000.00 |
7 | Muffy | 24 | 因多爾 | 10000.00 |
4 | Chaitali | 25 | 孟買 | 6500.00 |
2 | Khilan | 25 | 德里 | 1500.00 |
5 | Hardik | 27 | 博帕爾 | 8500.00 |
1 | Ramesh | 32 | 艾哈邁達巴德 | 2000.00 |
帶有 WHERE 子句的 ORDER BY
我們還可以將 WHERE 子句與 ORDER BY 子句一起使用,以對滿足某些條件的行進行排序。當我們想要根據特定條件對錶中的資料子集進行排序時,這非常有用。
示例
現在,我們從 CUSTOMERS 表中檢索客戶年齡為 25 的所有記錄,並根據其名稱的降序對其進行排序:
SELECT * FROM CUSTOMERS WHERE AGE = 25 ORDER BY NAME DESC;
輸出
以下是上述查詢的輸出:
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
2 | Khilan | 25 | 德里 | 1500.00 |
4 | Chaitali | 25 | 孟買 | 6500.00 |
帶有 LIMIT 子句的 ORDER BY
我們可以將 LIMIT 子句與 ORDER BY 子句一起使用,透過按升序或降序排序來限制指定的行數。
語法
以下是 MySQL 資料庫中使用 LIMIT 子句與 ORDER BY 子句的語法:
SELECT column1, column2, ... FROM table_name ORDER BY column_name1 [ASC | DESC], column_name2 [ASC | DESC], ... LIMIT N;
示例
在這裡,我們根據薪水從 CUSTOMERS 表中檢索前 4 條記錄,並根據其名稱按升序對其進行排序:
SELECT SALARY FROM CUSTOMERS ORDER BY NAME LIMIT 4;
輸出
以下是上述查詢的輸出:
薪水 |
---|
6500.00 |
8500.00 |
2000.00 |
1500.00 |
按首選順序排序結果
還可以使用 ORDER BY 子句中的CASE語句按自己的首選順序對錶的記錄進行排序。所有值都與它們應該排序的位置一起在子句中指定;如果沒有給出任何數字,則它們將自動按升序排序。
示例
要按自己的首選順序獲取行,使用的 SELECT 查詢如下:
SELECT * FROM CUSTOMERS ORDER BY ( CASE ADDRESS WHEN 'MUMBAI' THEN 1 WHEN 'DELHI' THEN 2 WHEN 'HYDERABAD' THEN 3 WHEN 'AHMEDABAD' THEN 4 WHEN 'INDORE' THEN 5 WHEN 'BHOPAL' THEN 6 WHEN 'KOTA' THEN 7 ELSE 100 END );
輸出
上述查詢根據使用 CASE 語句定義的自定義順序對 CUSTOMERS 表進行排序。在這裡,我們根據 ADDRESS 列中指定的城市的居民人口對記錄進行排序。
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
4 | Chaitali | 25 | 孟買 | 6500.00 |
2 | Khilan | 25 | 德里 | 1500.00 |
6 | Komal | 22 | 海得拉巴 | 4500.00 |
1 | Ramesh | 32 | 艾哈邁達巴德 | 2000.00 |
7 | Muffy | 24 | 因多爾 | 10000.00 |
5 | Hardik | 27 | 博帕爾 | 8500.00 |
3 | Kaushik | 23 | 科塔 | 2000.00 |