今天说一下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 比 总返回行数多,将不返回任何行

 

谢谢又看我一本正经の胡说八道~祝大家新年继续快乐

 

posted on 2016-02-18 16:16  神崎橙  阅读(531)  评论(0编辑  收藏  举报

导航