共计 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 行业资讯频道!