说在前面

突发奇想,想了解一下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;
code name
中一
中二
高一 我是
高二 我的
高二 我们

结果如下:首先谢谢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;
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基于不同字段条件排序

    MySQL order by基于不同字段条件排序 从数据库上查询数据的时候,按要求排序,在某个字段的不同值的基础上再选择不同的字段进行排序,具体描述如下: 1:首先有一个基础字段status ,sta ...

  2. sqlserver的order by多个字段排序优先级

    环境:SQLserver2012,数据库比较lower 不要介意, 首先简单的来, 1:单个字段排序 SELECT * FROM dbo.app_merchant_card_limit ORDER B ...

  3. mysql选择排序规则_关于mysql创建数据库中字符集和排序规则的选择

    1:字符集: 一般 主要选择两种: 1:utf8   (看unicode编码区从1 - 126就属于传统utf8区,),一般都够用,除非需要存储特殊字符 2:utf8mb4(utf8mb4兼容utf8 ...

  4. MySQL查询复杂情况的字段排序

    MySQL查询复杂情况的字段排序 复杂情况 排序用到的函数 先看效果 SQL片段 有话说 复杂情况 排序字段可能是数字.字母.汉字及其多重组合. 例如1号楼 1单元.一号楼 2单元.A区 A座.A1区 ...

  5. mysql排序规则_MySQL中Order By多字段排序规则代码示例

    说在前面 突发奇想,想了解一下mysql order by排序是以什么规则进行的? 好了,话不多说,直接进入正题吧. MySql order by 单字段 建一测试表如下: CREATE TABLE ...

  6. mysql orderby 规则_MySQL中OrderBy多字段排序规则代码示例

    说在前面 突发奇想,想了解一下mysql order by排序是以什么规则进行的? 好了,话不多说,直接进入正题吧. MySql order by 单字段 建一测试表如下: CREATE TABLE ...

  7. mysql 回退查询_MYSQL数据库表排序规则不一致导致联表查询,索引不起作用问题...

    Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...

  8. mysql中一次字符集和排序规则引起的sql查询报错

    先看sql o.city_name AS '城市',o.city_code AS '城市编码',o.comp_name AS '公司',o.comp_code AS '分公司编码',b.brand_n ...

  9. mysql order by 多个字段 索引_mysql 索引优化order by 语句

    MySql创建索引时支持ASC或DESC排序. 下面举例 创建表时同时创建索引降序排序(sname 字段上普通索引降序) create table tbl1 ( id int unique, snam ...

最新文章

  1. MySQL数据库左连接查询left join ... on
  2. VTK:线性单元用法实战
  3. java3d box 坐标,3d transform的坐标空间及位置
  4. Python3.6+Django2.0+Xadmin2.0学生信息管理系统-2
  5. 思科修复运营商级路由器中的两个已遭利用漏洞
  6. c++提取map key_写 React / Vue 项目时为什么要在列表组件中写 key,其作用是什么?...
  7. matlab 仿真 毕业设计,毕业设计matlab仿真
  8. 联想电脑重装系统F12开机项选择无USB启动选项
  9. 哈尔滨工业大学 计算机系教授,哈尔滨工业大学计算机科学与技术学院导师简介:张田文...
  10. 小数化分数(C++ 代码讲解很详细)
  11. OpenStack-Placement组件部署详解(T版)
  12. Matlab可视化四维数据
  13. Java 开发环境搭建
  14. VSFTPD服务器配置
  15. SpringBoot项目No qualifying bean of type ‘×××Mapper‘ available:的错误解决
  16. 2022-2028全球与中国荧光增白剂 OB-1市场现状及未来发展趋势
  17. Hilbert 变换提取信号特征的 Python 实现
  18. win7如何添加网络打印机和驱动
  19. centos7 安装 Redis(资源)
  20. WorldCereal下玉米和小麦全球作物日历

热门文章

  1. linux输入ll命令各个字段的含义
  2. 从图像超分辨率快速入门pytorch
  3. 计算机图形学常用算法实现11 扫描线z-buffer算法
  4. 我辛辛苦苦做了一个月的项目,组长年底用来写了晋升PPT
  5. android listview 的下拉刷新
  6. 算完boxplot的四分位数以后,如何利用excel制作boxplot
  7. Qt界面编程-Qt简介
  8. c 语言中古括号,如何将中古调式运用在你的作品上
  9. 静态编译,动态编译,静态库,动态库的区别
  10. bool型函数定义及应用