通过were和having条件可以对数据进行筛选,那么如何通过排序对数据进行筛选呢?
1.TOPɸѡ
用于限制查询返回行数或者行数的百分比。
例如 我们对订单表筛选最近产生的订单5条
SELECT TOP (5) orderid, orderdate, custid, empid FROM Sales.Orders ORDER BY orderdate DESC;
这是通过 排序对数据进行筛选
前面写过order by子句是在select 子句之后计算的, select又包含disinct选项 ,所以dinsinct 计算顺序大于top 在对数据去重复后再进行top计算
搞不懂一点的是TOP查询返回的是表结果还是游标?, 一般带order by子句的查询返回是一个游标,而不是一个关系结果。
TOP选项中加入PERCENT关键字 寻找最近产生1%订单
SELECT TOP (1) PERCENT orderid, orderdate, custid, empid FROM Sales.Orders ORDER BY orderdate DESC;
以日期作为排序字段 会出现 多行具有相同的订单日期 每次执行都有不确定性会返回不一样的结果,所有要确保排序字段的唯一性。
问题来了 如果问题已经存在不能确保唯一性 那如何解决呢? 我们可以加入WITH TLES选项 主要作用返回表中 最后匹配一行所有结果防止因为行同源导致返回数据不一致。
SELECT TOP (5) WITH TIES orderid, orderdate, custid, empid FROM Sales.Orders ORDER BY orderdate DESC;
注意:即使没有排序order by 子句 TOP选项排序也是不明确的,SQL Server 会返回首先物理访问到N 行数据 而不是根据表顺序。
2.OFFSET-FETCH ɸѡ
SELECT orderid, orderdate, custid, empid FROM Sales.Orders ORDER BY orderdate, orderid OFFSET 50 ROWS FETCH NEXT 25 ROWS ONLY;
原文:https://www.cnblogs.com/yuanzijian-ruiec/p/9333775.html