說在前面
突發奇想,想了解一下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 |
結果如下:
| name | hex(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的結果
| code | name |
| 高二 | 我的 |
| 高一 | 我是 |
| 高二 | 我們 |
| 中一 | 我 |
| 中二 | 你 |
| code | name |
| 高二 | 我們 |
| 高二 | 我的 |
| 高一 | 我是 |
| 中二 | 你 |
| 中一 | 我 |
結果很明顯:單一字段排序的時候,其他字段出現的順序是自然排序的。
下面我們看看多字段的排序
| -- 按照code, name進行降序排序 select * from a order by code, name desc; |