版权声明:本文为博主原创文章,未经博主允许不得转载。					https://blog.csdn.net/xlxxcc/article/details/52250963				</div>
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-d7e2a68c7c.css">
<div class="htmledit_views" id="content_views">
<h2 style="margin-left:0px;"><a name="t0"></a>说在前面</h2>

突发奇想,想了解一下mysql order by排序是以什么规则进行的? 好了,话不多说,直接进入正题吧。

MySql order by 单字段

建一测试表如下:


  1. CREATE TABLE `a` (
  2. `code` varchar(255) DEFAULT NULL,
  3. `name` varchar(255) DEFAULT NULL
  4. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  1. INSERT into a values('中一', '我');
  2. INSERT into a values('中二', '你');
  3. INSERT into a values('高一', '我是');
  4. INSERT into a values('高二', '我们');
  5. INSERT into a values('高二', '我的');

测试语句如下:


  1. -- hex(): 获取16进制字节码
  2. select name, hex(name) from a order by name desc

结果如下:

name hex(name)
我的 E68891E79A84
我是 E68891E698AF
我们 E68891E4BBAC
E68891
E4BDA0

很明显,MySQL中的排序,是以字节码进行排序的,当第一个字相同的时候,比较第二个字的字节码, 一次类推

MySql order by 多字段

有比较,才有想法,有比较才有进步,因此我们先把单字段的降序排序结果列出来,然后在看看两个字段的降序排序气矿,我们就可以从中分析出其中道理来。


  1. -- 按照name进行降序排序
  2. select * from a order by name desc;
  3. -- 按照code进行降序排序
  4. select * from a order by code desc;

左边是order by name desc, 右边是order by code desc的结果

code name
高二 我的
高一 我是
高二 我们
中一
中二
code name
高二 我们
高二 我的
高一 我是
中二
中一

结果很明显:单一字段排序的时候,其他字段出现的顺序是自然排序的。

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


  1. -- 按照code, name进行降序排序
  2. select * from a order by code, name desc;
code name
中一
中二
高一 我是
高二 我的
高二 我们

结果如下:首先谢谢qq_27837327MjayTang 的,本人在这里一次测试, 原文说这个sql排序无效的说法是错误的。实际上说order by code,name desc等同于order by code asc, name desc

经测试发现,select * from a order by code and name desc 排序效果依然无效。

我们在看看下面的语句


  1. -- 按照code, name进行降序排序
  2. select * from a order by code desc, name desc;
  3. -- 该语句的效果等同于下面的语句, 其中1、2分别对应的是code、name
  4. select code, name from a order by 1 desc, 2 desc;
code name
高二 我的
高二 我们
高一 我是
中二
中一

对比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
code name
高二 我的
高二 我们
高一 我是
中二
中一

很明显,在这个测试例子上来看, order by concat(code, name) desc的效果等同于 order by code desc, name desc

MySql Order By 多个字段 排序规则的更多相关文章

  1. mysql order by 多个字段排序

    工作中需用到order by 后两个字段排序,但结果却产生了一个Bug,以此备录. [1]复现问题场景 为了说明问题,模拟示例数据库表students,效果同实例. 如下语句Sql_1: SELECT ...

  2. mysql order by 多个字段排序实现组内排序

    总结:大组在前,小组在后,计量值再最后,即可实现组内排序:下边是参考别人的具体实例: 工作中需用到order by 后两个字段排序,但结果却产生了一个Bug,以此备录. [1]复现问题场景 为了说明问 ...

  3. MySql数据库字段排序规则不一致产生的一个问题

    最近项目向MySql迁移,迁移完毕后,在获取用户权限时产生了一个异常,跟踪进去获取执行的语句如下, SELECT PermissionId FROM spysxtPermission WHERE (R ...

  4. mysql order by多个字段

    Mysql order by 多字段排序 mysql单个字段降序排序: select * from table order by id desc; mysql单个字段升序排序: select * fr ...

  5. SQL order by 两个字段排序

    select * from emp;

  6. mysql建数据库的字符集与排序规则

    1.字符集说明: 一般选择utf8.下面介绍一下utf8与utfmb4的区别. utf8mb4兼容utf8,且比utf8能表示更多的字符.至于什么时候用,看你的做什么项目了,到http://blog. ...

  7. mysql建数据库的字符集与排序规则说明

    本文转自https://blog.csdn.net/qq_38224812/article/details/80745868,感谢作者,自己留存已备他日使用 1.字符集说明: 一般选择utf8.下面介 ...

  8. mysql 字段指定值靠前排序方法,多字段排序排序方法

    背景:SEO下选择某查询条件 查询展示信息为装修设计师以及设计师作品.设计师原型设计为:选择某风格 例如:简约,则列表出现拥有简约风格的设计师信息以及该设计师类型为简约的作品(3条靠前记录) 浏览原型 ...

  9. MySQL数据库字符集和排序规则的四个级别

    MySQL数据库字符集和排序规则有四个级别的默认设置:服务器,数据库,表和列. 最初,服务器字符集和排序规则取决于启动mysqld时使用的选项.可以使用 --character-set-server该 ...

随机推荐

  1. Python3.7&Django1.11.15 兼容性问题

    环境: 1. Windows10 2. python3.7 3. Django1.11.15 启动Django时抛出以下异常: Unhandled exception in thread starte ...

  2. 今日SGU 5.2

    SGU123 题意:求和 收获:无 #include<bits/stdc++.h> #define de(x) cout<<#x<<"="< ...

  3. Java中join和yield的作用

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 1.   A.join,在API中的解释是,堵塞当前线程B,直到A执行完毕并死掉,再执行B. 用一个 ...

  4. Python基础教程之第3章 使用字符串

    Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32 Type "copyri ...

  5. Java IO:SocketChannel和Selector在ZooKeeper中应用

    转载请注明出处:jiq•钦's technical Blog 假设不了解SocketChannel和Selector.请先阅读我的还有一篇博文:点击打开链接 ZooKeeper的启动从QuorumPe ...

  6. php如何读写excel

    php如何读写excel 一.总结 一句话总结:PHP操作Excel最好的方法是使用PHPExcel类, 可以到官网下载PHPExcel类库 http://phpexcel.codeplex.com ...

  7. GPU-Z:显卡体质、显卡各传感器实时状态的查看

    1. TechPowerUp GPU-Z:查看显卡体质 下载地址:Download TechPowerUp GPU-Z | techPowerUp 点击 bus interface 后的?进行显卡的体 ...

  8. Windows 下 Sublime Text 默认打开方式问题解决办法

    Sublime Text 2 是很受ACMer喜爱的文本编辑器 但是绿色版删除后无法设置为默认打开方式...而且网上也没有给出明确的解决办法 注册表的解决办法: 删除 HKEY_CURRENT_USE ...

  9. C#如何调用非托管的C++Dll

    现在在Windows下的应用程序开发,VS.Net占据了绝大多数的份额.因此很多以前搞VC++开发的人都转向用更强大的VS.Net.在这种情况下,有很多开发人员就面临了如何在C#中使用C++开发好的类 ...

  10. jsp中标签id和name的区别(转)

    name原来是为了标识之用,但是现在根据规范,都建议用id来标识元素. 但是name在以下用途是不能替代的:1. 表单(form)的控件名,提交的数据都用控件的name而不是id来控制.因为有许多na ...