今天说一下Order by 这个常规东西~
Order by 在我们日常的数据库开发生活中是出镜率灰常高的。
order by 的作用就是用于对查询出来的结果进行排序~对啊~人家就是这么接地气~比如按发生时间啊,首字母啊之类的都是相当常见。
今天主要分享一下order by 的用法和样例。
常规用法
CREATE TABLE #Tmp1( ID INT IDENTITY, Col1 NVARCHAR(50), Col2 NVARCHAR(max) ) INSERT INTO #Tmp1 ( Col1 ,Col2) VALUES (N'AAA',REPLICATE('AAA',5000 )) ,( N'aaa',REPLICATE('aaa',5000 )) ,(N'aAA',REPLICATE('aAA',5000 )) ,(N'aaA',REPLICATE('aaA',5000 )) SELECT * FROM #Tmp1 ORDER BY ID
这个是最简单的~然后如果我们想奇数优先,偶数殿后~这个就用到了order by 里面的表达式技能~如
SELECT * FROM #Tmp1 ORDER BY CASE WHEN ID%2 > 0 THEN 1 ELSE 2 END, ID
支持表达式~无论你是想要在order by 里面求和还是乘积,都通通可以满足你的要求~但是有一点,就是数据类型一致,起码是可以隐式转换成一致╮(╯_╰)╭。不然,1和a 谁大呢?
然后看下我的例子~虽然都是aaa,当然罗,大小写是不一样的,但是通常在我们默认的排序里面呢,大小写是不区分,a 和 A是一个人。如果要加上大小写排序罗,那就在order by 后面引用排序序列就好了
排序规则排序参考:https://msdn.microsoft.com/zh-cn/library/ms143726(v=sql.120).aspx
SELECT * FROM #Tmp1 ORDER BY Col1 COLLATE Azeri_Latin_100_CS_AI ASC
但是有一些类型是是无法排序的,比如说ntext,text ,image ,xml ,地理类型 这些类型都无法使用 order by 进行排序。
然而,在2012之后的版本,sql server 提供了便捷的查询分页语句 Offset fetch 语句 (然而好像mysql 之类的一早支持了这种写法,但是性能上面并没有比对过)
当我们取用前2行的写法,比之前写了一堆的分页语句在开发上确实便捷了好多好多
SELECT * FROM #Tmp1 ORDER BY Col2 COLLATE Azeri_Latin_100_CS_AI ASC OFFSET 0 ROWS FETCH NEXT 2 ROWS only
有2点注意
1、offset 从0 开始,并不是1
2、如果offset 比 总返回行数多,将不返回任何行
谢谢又看我一本正经の胡说八道~祝大家新年继续快乐