浅谈 sql中order by
关于order by主要是用于升序、降序。但是要深入了解其它、会发现,其实order by语句并不是我们想象中的那么简单。
接下来说说 order by 的一般用法。
1、关于数字和日期的比较:
这个很应该很简单、就不多说了。
2、关于字符串的比较。
我想、学软件的,基本都学过一点C语言,那么对于字符串的比较,其实就是比较第一个字母的ascii码值,如果第一个字母相等、那么就比较第二个、依次类推。
如果是汉字做比较的话,其实可以把汉字用拼音拼起来、用他们的拼音的首个ascii码值做比较、如果第一个相同,就比较后面一个、依次类推。
如果汉字和拼音做比较、那么、汉字永远比拼音高;
(注:ascii码值中只用记得
A=65 a=97
他们后面的字母、依次加一
汉字也有ascii码值,标准码一般都是 几万 不便记忆)
3、对于字符的比较:
例如字符 23 和123做比较:
实质上是拿 23中的2和123中的1做比较
也就是说、不管字符有多长都是从第一位比较、依次类推;
打个比方 2个数字 2和 1.3453453543453做比较
我们只用先看地一位、后面哪怕跟在多的数字也不起作用、如果第一位相等了,才考虑后面的数字。
4、对于空值的排序
在sql中、null值为最小、也就是说、数据中的数字有多么小、这个null值总是比他们还要小、但是在oracle中、null值为最大。
但是、我们可以手动改变null的值
其语法是 isnull(列名,值)
(注:实质上是在内存中null的地方、给他插入一个值)
关于多条件排序
例如
select * from 表 order by 列1,列2
等于与
select * from 表 order by 列1 asc,列2 asc
因为asc为默认、也就是说、我们不在后面加asc关键字都会升排序
其实质意义就是、先按照列1的值排序,当列1中有重复数据的时候、在按列2里面的值来排序,如果有列3、就是按照列2里面的重复数据来排列
(注:列2的排序仅仅存在于列1的重复数据的排序)
当然在这里、我们也可以用到计算列
假若说、我们想要一排数据降序排序、最简单的方式就是、
select * from 表 order by -列
给order by 后面的列名一个负号、就可以轻松达到这一点。