MySQL中的排序(ORDER BY)


當使用 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 之后。使用子句的次序不對將產生錯誤消息

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM