明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

詳細(xì)說明MySQL中Order By多字段排序規(guī)則

[摘要]想了解一下mysql order by排序是以什么規(guī)則進(jìn)行的? 本文主要介紹了MySQL中Order By多字段排序規(guī)則代碼示例,小編覺得挺不錯的,這里給大家分享下,需要的朋友可以參考,希望能幫助到...
想了解一下mysql order by排序是以什么規(guī)則進(jìn)行的? 本文主要介紹了MySQL中Order By多字段排序規(guī)則代碼示例,小編覺得挺不錯的,這里給大家分享下,需要的朋友可以參考,希望能幫助到大家。

MySql order by 單字段

建一測試表如下:


CREATE TABLE `a` ( 
 `code` varchar(255) DEFAULT NULL, 
 `name` varchar(255) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


INSERT into a values('中一', '我'); 
INSERT into a values('中二', '你'); 
INSERT into a values('高一', '我是'); 
INSERT into a values('高二', '我們'); 
INSERT into a values('高二', '我的');

測試語句如下:


-- hex(): 獲取16進(jìn)制字節(jié)碼 
select name, hex(name) from a order by name desc

結(jié)果如下:

namehex(name)
我的E68891E79A84
我是E68891E698AF
我們E68891E4BBAC
E68891
E4BDA0

很明顯,MySQL中的排序,是以字節(jié)碼進(jìn)行排序的,當(dāng)?shù)谝粋字相同的時(shí)候,比較第二個字的字節(jié)碼, 一次類推

MySql order by 多字段

有比較,才有想法,有比較才有進(jìn)步,因此我們先把單字段的降序排序結(jié)果列出來,然后在看看兩個字段的降序排序氣礦,我們就可以從中分析出其中道理來。


-- 按照name進(jìn)行降序排序 
select * from a order by name desc; 
-- 按照code進(jìn)行降序排序 
select * from a order by code desc;

左邊是order by name desc, 右邊是order by code desc的結(jié)果

codename
高二我的
高一我是
高二我們
中一
中二
codename
高二我們
高二我的
高一我是
中二
中一

結(jié)果很明顯:單一字段排序的時(shí)候,其他字段出現(xiàn)的順序是自然排序的。

下面我們看看多字段的排序


-- 按照code, name進(jìn)行降序排序 
select * from a order by code, name desc;
codename
中一
中二
高一我是
高二我的
高二我們

結(jié)果如下:首先謝謝qq_27837327和MjayTang 的,本人在這里一次測試, 原文說這個sql排序無效的說法是錯誤的。實(shí)際上說order by code,name desc等同于order by code asc, name desc

經(jīng)測試發(fā)現(xiàn),select * from a order by code and name desc 排序效果依然無效。

我們在看看下面的語句


-- 按照code, name進(jìn)行降序排序 
select * from a order by code desc, name desc; 
-- 該語句的效果等同于下面的語句, 其中1、2分別對應(yīng)的是code、name 
select code, name from a order by 1 desc, 2 desc;
codename
高二我的
高二我們
高一我是
中二
中一

對比code,name的單個字段降序排序,我們可以發(fā)現(xiàn), 使用 order by code desc, name desc的時(shí)候,MySQL會先以code進(jìn)行降序排序,在code進(jìn)行降序排序該基礎(chǔ)上,再使用name進(jìn)行降序排序。

另外我們還可以使用contat函數(shù)把多個字段拼接起來,在進(jìn)行排序。但是要保證字段不能為null。下面我們來看一下concat的sql語句和結(jié)果。


select * from a order by concat(code,name) desc
codename
高二我的
高二我們
高一我是
中二
中一

很明顯,在這個測試?yán)由蟻砜矗?order by concat(code, name) desc的效果等同于 order by code desc, name desc

相關(guān)推薦:

MySQL Order by 語句優(yōu)化代碼詳解

mysql中order by in 的字符順序(推薦)

MySQL Order By用法分享

以上就是詳解MySQL中Order By多字段排序規(guī)則的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!


學(xué)習(xí)教程快速掌握從入門到精通的SQL知識。