HOWTO · MySQL

按字母順序對 MySQL 資料進行排序

本教程演示如何按字母順序對 MySQL 伺服器中的資料進行排序。

本頁內容

若要依姓名從 A 到 Z 擷取 MySQL 資料列,請在 SELECT 查詢中加入 ORDER BY,並在後面指定文字欄位。預設排序方向為遞增;加入 DESC 即可反向排序,從 Z 到 A。以下範例使用 student_details 資料表及其 stu_firstName 欄位。

在 MySQL 中建立資料表

範例資料表包含 ID、名字和姓氏。若要建立資料表,請執行 CREATE TABLE student_details (stu_id INT, stu_firstName VARCHAR(255) DEFAULT NULL, stu_lastName VARCHAR(255) DEFAULT NULL, PRIMARY KEY (stu_id));。接著使用 INSERT INTO student_details (stu_id, stu_firstName, stu_lastName) VALUES (1, 'Preet', 'Sanghavi'), (2, 'Rich', 'John'), (3, 'Veron', 'Brow'), (4, 'Geo', 'Jos'), (5, 'Hash', 'Shah'), (6, 'Sachin', 'Parker'), (7, 'David', 'Miller'); 新增範例記錄。主鍵會為每位學生的資料列指定不同 ID;排序範例會使用這些姓名值。這些 SQL 陳述式是查詢範例;執行結果取決於是否在 MySQL 資料庫中執行。

若要查看新增的資料列,請執行 SELECT * FROM student_details;。這個查詢沒有指定排序方式,因此資料庫可以用非字母順序的方式傳回資料列。不要把資料新增的先後順序當成排序保證;請在每個查詢中指定所需的順序。

在 MySQL 資料庫中依字母順序排序資料

用於排序的子句是 ORDER BY;單獨使用 ORDER 並不足以排序。一般形式如下:SELECT columns FROM table_name ORDER BY column_name;。在這個範例中,使用 SELECT stu_firstName FROM student_details ORDER BY stu_firstName; 只選取名字。由於預設排序方向是遞增,姓名會依字母順序從 A 排到 Z。結果依序為 David、Geo、Hash、Preet、Rich、Sachin、Veron。

你可以明確寫出 ASC,讓排序方向更清楚:SELECT stu_firstName FROM student_details ORDER BY stu_firstName ASC;。這與省略排序方向時一樣,都是遞增排序。ASC 和 DESC 是排序方向關鍵字,會接在 ORDER BY 子句中的欄位名稱後面。

若要反轉順序,請加上 DESC:SELECT stu_firstName FROM student_details ORDER BY stu_firstName DESC;。結果依序為 Veron、Sachin、Rich、Preet、Hash、Geo、David。這是遞減字母順序,也就是從 Z 排向 A。排序方向會影響傳回資料列的順序,不會改變儲存的值,也不會重新排列資料表本身。由於範例只選取 stu_firstName,結果只會有名字這一欄。若想在排序結果中顯示更多資訊,可以將 stu_id 或 stu_lastName 加入 SELECT 清單;排序仍由 ORDER BY 後指定的欄位決定。

你可以將 student_details 換成自己的資料表名稱,並將 stu_firstName 換成想排序的文字欄位,藉此調整查詢。即使選取其他欄位,也要在 ORDER BY 子句中保留排序欄位,例如 SELECT stu_firstName, stu_lastName FROM student_details ORDER BY stu_firstName;。若要依 A 到 Z 排序,使用預設方向或 ASC;反向排序則使用 DESC。文字值的實際順序會依欄位的 MySQL 定序規則而定,因此這個基本範例只示範提供的英文姓名,不代表各語言的排序規則。

如果查詢也要篩選資料列,請將 ORDER BY 放在 WHERE 之後;如果要限制傳回的資料列數量,則將 LIMIT 放在排序子句之後。例如,查詢的結構如下:SELECT columns FROM table_name WHERE condition ORDER BY column_name DESC LIMIT row_count;。MySQL 會先套用篩選條件,再排序符合條件的資料列,最後最多傳回指定數量的資料列。排序欄位必須可供查詢使用,而排序方向要接在該欄位名稱後面。