<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      詳細說明MySQL中Order By多字段排序規則

      [摘要]想了解一下mysql order by排序是以什么規則進行的? 本文主要介紹了MySQL中Order By多字段排序規則代碼示例,小編覺得挺不錯的,這里給大家分享下,需要的朋友可以參考,希望能幫助到...
      想了解一下mysql order by排序是以什么規則進行的? 本文主要介紹了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 語句優化代碼詳解

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

      MySQL Order By用法分享

      以上就是詳解MySQL中Order By多字段排序規則的詳細內容,更多請關注php中文網其它相關文章!


      學習教程快速掌握從入門到精通的SQL知識。




      日韩精品一区二区三区高清