SQL两种简单分页查询方式

标签: sql 分页 | 发表时间:2015-01-03 19:21 | 作者:lhc2207221755
出处:http://blog.csdn.net


          

        以前我们或许都用过了linq的skip and take方式进行分页查询,但是很少自己写sql的分页查询,因为大多数时候,我们都是在调用别人的方法。


             最近看到一个文档,感觉方法里面实现的分页查询进入数据库调用的时候,实际最底层调用的还是SQL的分页查询,例如,我们用linq写个分页查询,转成sql表达式后发现:


     

          



             实际调用的时候,才发现SQL底层是这样进行分页的。


       

                   下面,本文主要是介绍两种SQL的分页查询。



  一,TOP方式 


----第一种分页查询方式:TOP方式
  declare @page int=3  --当前页面
  declare @nums int=5  --每页5条

  select top (@nums)
       [Ar_id]
      ,[Ar_Title] from [ta_Article] 
  where [Ar_id] not in (select  top ((@nums)*(@page-1)) [Ar_id] from [ta_Article] order by [Ar_id]) 
	  order by [Ar_id] 

      

         top是选择前多少行,在利用top分页的时候,比如我们要取第3页,每页5条数据,这时候,我们可以先去掉前2页的数据,然后用top选择剩下数据的前5条。




二,ROW_NUMBER()方式


  这种方式是从SQL SERVER 2008才开始支持的,是不是感觉挺高仿Oracle的~


 

--第二种分页查询方式:ROW_NUMBER()方式


declare @pageNum int=3  --当前页面
declare @EachNums int=5  --每页5条

select * from(
	  select [Ar_id]
      ,[Ar_Title],ROW_NUMBER() over(order by [Ar_id],[Ar_Title]) as 行号  from [ta_Article]) as t
	   
		    where t.行号 between (((@EachNums)*(@pageNum-1))+1) and (@pageNum)*(@EachNums)
			


 使用Row_Number主要是根据行号进行分页,最后一个between 判断行号。




      小结:

              SQL分页方式有很多种,在选择如何分页的时候,要考虑用户比较常用的是前面的页还是后面的页,如果是比较靠前的页,top方式还是不错的。如果是靠后的,可以选择rownumber;另外,有时候还是要综合考虑。综合考虑的时候,rownumber方式是比较常见的,也是效率比较好的。



       


 

作者:lhc2207221755 发表于2015-1-3 11:21:39 原文链接
阅读:0 评论:0 查看评论

相关 [sql 分页] 推荐:

Derby SQL 分页

- - ITeye博客
    之前在网上看到有人问 Derby SQL 分页实现的问题,网上有人给出这样的解决方案,SQL 如下:. 其实,这样的分页查询,性能不理想,我试过在 300W 数据量中采用这种分页方式,需要 20~30秒之久;其实 Derby 10.6 以上版本有更好的分页支持,直接给出 SQL 实现如下:.

SQL Server分页3种方案比拼

- - CSDN博客推荐文章
插入数据:(2万条,用更多的数据测试会明显一些) . 分页方案一:(利用Not In和SELECT TOP分页) . SELECT TOP 页大小 * .           (SELECT TOP 页大小*页数 id .          FROM 表 . 分页方案二:(利用ID大于多少和SELECT TOP分页) .

SQL两种简单分页查询方式

- - CSDN博客推荐文章
        以前我们或许都用过了linq的skip and take方式进行分页查询,但是很少自己写sql的分页查询,因为大多数时候,我们都是在调用别人的方法.              最近看到一个文档,感觉方法里面实现的分页查询进入数据库调用的时候,实际最底层调用的还是SQL的分页查询,例如,我们用linq写个分页查询,转成sql表达式后发现:.

PL/SQL动态SQL(原创)

- - ITeye博客
使用动态SQL是在编写PL/SQL过程时经常使用的方法之一. 很多情况下,比如根据业务的需要,如果输入不同查询条件,则生成不同的执行SQL查询语句,对于这种情况需要使用动态SQL来完成. 再比如,对于分页的情况,对于不同的表,必定存在不同的字段,因此使用静态SQL则只能针对某几个特定的表来形成分页.

SQL Server--索引

- - CSDN博客推荐文章
         1,概念:  数据库索引是对数据表中一个或多个列的值进行排序的结构,就像一本书的目录一样,索引提供了在行中快速查询特定行的能力..             2.1优点:  1,大大加快搜索数据的速度,这是引入索引的主要原因..                             2,创建唯一性索引,保证数据库表中每一行数据的唯一性..

MySql动态SQL

- - SQL - 编程语言 - ITeye博客
13.7. 用于预处理语句的SQL语法. MySQL 5.1对服务器一方的预制语句提供支持. 如果您使用合适的客户端编程界面,则这种支持可以发挥在MySQL 4.1中实施的高效客户端/服务器二进制协议的优势. 候选界面包括MySQL C API客户端库(用于C程序)、MySQL Connector/J(用于Java程序)和MySQL Connector/NET.

sql优化

- - 数据库 - ITeye博客
是对数据库(数据)进行操作的惟一途径;. 消耗了70%~90%的数据库资源;独立于程序设计逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低;. 可以有不同的写法;易学,难精通. 固定的SQL书写习惯,相同的查询尽量保持相同,存储过程的效率较高. 应该编写与其格式一致的语句,包括字母的大小写、标点符号、换行的位置等都要一致.

birt动态SQL

- - ITeye博客
birt动态SQL实现有三种方式:拼接SQL、绑定变量和让应用程序拼接,birt得到返回结果集方式. 在数据集中写SQL,如下:. 选中数据集,点script方式,在beforeOpen事件中写如下SQL:. 然后就可以了,当然,也可以不写第一步,直接所有的SQL都在beforeOpen中拼接. 但是,拼接SQL方式不仅复杂容易错,还会导致SQL注入风险.

SQL Server 面试

- - SQL - 编程语言 - ITeye博客
在SQL语言中,一个SELECT…FROM…WHERE语句称为一个查询块,将一个查询块嵌套在另一个查询块的WHERE子句中的查询称为子查询. 子查询分为嵌套子查询和相关子查询两种. 嵌套子查询的求解方法是由里向外处理,即每个子查询在其上一级查询处理之前求解,子查询的结果作为其父查询的查询条件. 子查询只执行一次,且可以单独执行;.

MongoDB sql操作

- - 数据库 - ITeye博客
1.  基本查询:. 下面的示例等同于SQL语句的where name = "stephen" and age = 35.      --返回指定的文档键值对. 下面的示例将只是返回name和age键值对.      --指定不返回的文档键值对. 下面的示例将返回除name之外的所有键值对.