SQL Server查询、限制返回行数

我们在日常开发中,经常涉及到分页查询。特别是和页面进行交互,分页查询已是家常便饭。 现在很多的jq插件都会有分页的模块,可以在页面上将数据更好的呈现给用户,使得用户拥有更好的体验。像我们熟悉的有很多,例如layui,他里面就有关于分页的处理模块。 但我们忽略了一个问题,就是将数据都查询后交由到页面层去处理。如果数据量多,这就容易造成页面加载缓慢,资源消耗大的问题。 针对这一问题,SQL Server早已给出了解决方法。将分页条件放到sql语句中,实现按需查询, 需要多少数据,从哪一行开始查询数据。 Offset Fetch子句:它们用于限制查询返回的行数。必须将 OFFSET FETCH 子句与 ORDER BY子句一起搭配使用。 废话不多说,接下来看我操作:

select product_id,product_name,list_price from production.products 
order by product_id offset (2-1)*10 rows fetch next 10 rows only

用分页的模式,查询production.products表的id、商品、价格三个字段。从id序号11开始查询, 查询数据10条。下面是查询结果:

SQL Server还提供了好几种模式,都是限制返回行数的。 PERCENT:限制返回的行数,返回查询出的总数据的百分比。例如:总数据为100,要求查询8%,那么返回的就是8条数据。 查询sales.customers表总数据的1%。sales.customers表的总数据是1445行

select top 1 percent city,first_name,last_name from sales.customers order by last_name
执行结果:

例如跳过前面310条数据,查询剩下的所有数据

select product_id,product_name,list_price from production.products order by product_id offset 310 rows

执行结果:

还有其他几种,就不演示了。总之,在sql分页查询比在页面上处理分页数据会更好。

经验分享 程序员 微信小程序 职场和发展