共計 1779 個字符,預計需要花費 5 分鐘才能閱讀完成。
丸趣 TV 小編給大家分享一下 MySQL 中 Order By 多字段排序規則的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
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 進制字節碼
select name, hex(name) from a order by name desc
結果如下:
namehex(name) 我的 E68891E79A84 我是 E68891E698AF 我們 E68891E4BBAC 我 E68891 你 E4BDA0
很明顯,MySQL 中的排序,是以字節碼進行排序的,當第一個字相同的時候,比較第二個字的字節碼, 一次類推
MySql order by 多字段
有比較,才有想法,有比較才有進步,因此我們先把單字段的降序排序結果列出來,然后在看看兩個字段的降序排序氣礦,我們就可以從中分析出其中道理來。
-- 按照 name 進行降序排序
select * from a order by name desc;
-- 按照 code 進行降序排序
select * from a order by code desc;
左邊是 order by name desc, 右邊是 order by code desc 的結果
codename 高二我的高一我是高二我們中一我中二你 codename 高二我們高二我的高一我是中二你中一我
結果很明顯:單一字段排序的時候,其他字段出現的順序是自然排序的。
下面我們看看多字段的排序
-- 按照 code, name 進行降序排序
select * from a order by code, name desc;
codename 中一我中二你高一我是高二我的高二我們
結果如下:首先謝謝 qq_27837327 和 MjayTang 的,本人在這里一次測試,原文說這個 sql 排序無效的說法是錯誤的。實際上說 order by code,name desc 等同于 order by code asc, name desc
經測試發現,select * from a order by code and name desc 排序效果依然無效。
我們在看看下面的語句
-- 按照 code, name 進行降序排序
select * from a order by code desc, name desc;
-- 該語句的效果等同于下面的語句, 其中 1、2 分別對應的是 code、name
select code, name from a order by 1 desc, 2 desc;
codename 高二我的高二我們高一我是中二你中一我
對比 code,name 的單個字段降序排序,我們可以發現,使用 order by code desc, name desc 的時候,MySQL 會先以 code 進行降序排序,在 code 進行降序排序該基礎上,再使用 name 進行降序排序。
另外我們還可以使用 contat 函數把多個字段拼接起來,在進行排序。但是要保證字段不能為 null。下面我們來看一下 concat 的 sql 語句和結果。
select * from a order by concat(code,name) desc
codename 高二我的高二我們高一我是中二你中一我
很明顯,在這個測試例子上來看,order by concat(code, name) desc 的效果等同于 order by code desc, name desc
以上是“MySQL 中 Order By 多字段排序規則的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!