當使用 SELECT FROM 時,如果不排 序,數據一般將以它在底層表中出現的順序顯示。這可以是數據最初添加到表中的順序。但是,如果數據后來進行過更新或刪除,則此順 序將會受到MySQL重用回收存儲空間的影響。因此,如果不明確控 制的話,不能(也不應該)依賴該排序順序。關系數據庫設計理論認 為,如果不明確規定排序順序,則不應該假定檢索出的數據的順序有 意義。 《MySQL必知必會》
可以使用 ORDER BY 子句取一列或者多列的名字,據此對輸出進行排序,比如創建了如下的student表:
創建表:
CREATE TABLE stu (Cno SMALLINT, Sno CHAR(11) PRIMARY KEY, Sname CHAR(20) UNIQUE, Ssex CHAR(2), Sage SMALLINT);
插入數據:
insert into stu values(5,'20162180111','蕭峰','男',22); insert into stu values(4,'20162180108','張無忌','男',21); insert into stu values(3,'20162180222','王語嫣','女',21); insert into stu values(5,'20162180088','郭襄','女',19); insert into stu values(5,'20162180067','袁紫衣','女',21); insert into stu values(3,'20162180023','趙敏','女',20);

想依據Sno(學號)對輸出進行排序, SELECT * FROM stu ORDER BY Sno; 得到以下排序后的輸出。

但是,經常需要按不止一個列進行數據排序。比如想對上述表中的數據先進行班排序,然后在班內進行學號的排序,操作語句如下:
SELECT * FROM stu ORDER BY Cno,Sno;

但是應該注意到,這種多列一起排序的情況,以2列為例,如果第一列中的所有值都不相同,那么第二列中的排序就沒有意義了,如,所有的人都來自不同班,那么按班號排序后就無須再按學號排序了。
ORDER BY 默認的排序是升序的,也可以改為降序,操作語句如下:
SELECT * FROM stu ORDER BY Sno DESC;

當然,同理,想先按班級號升序排序,然后再在班內按學號降序排序的操作如下:
SELECT * FROM stu ORDER BY Cno,Sno DESC;

由此可以看到,DESC關鍵字只應用到直接位於其前面的列名。
使用ORDER BY 和 LIMIT 可以找出一個列中最高或者最低的值
比如,想找出學生中學號最高的那位同學,操作語句如下:
SELECT * FROM stu ORDER BY Sno DESC LIMIT 1;

注意:ORDER BY子句的位置 在給出ORDER BY子句時,應該保證它 位於FROM子句之后。如果使用LIMIT,它必須位於ORDER BY 之后。使用子句的次序不對將產生錯誤消息
