sql里面的分页】的更多相关文章

数据库分页是老生常谈的问题了.如果使用ORM框架,再使用LINQ的话,一个Skip和Take就可以搞定.但是有时由于限制,需要使用存储过程来实现.在SQLServer中使用存储过程实现分页的已经有很多方法了.之前在面试中遇到过这一问题,问如何高效实现数据库分页.刚好上周在业务中也遇到了这个需求,所以在这里简单记录和分享一下. 一 需求 这里以SQLServer的示例数据库NorthWind为例,里面有一张Product表,现在假设我们的需求是要以UnitPrice降序排列,并且分页,每一页10条…
[SQL]Oracle分页查询的三种方法 采用伪列 rownum 查询前10条记录 ? 1 2 3 4 5 6 7 8 9 10 11 [sql] select * from t_user t where ROWNUM <10;  按照学生ID排名,抓取前三条记录 [java] SELECT * FROM(SELECT id,realname FROM T_USER ORDER BY id asc ) WHERE ROWNUM <=3  分页SQL写法,从第10条记录开始,提取10条记录. […
<来源网址:http://www.delphifans.com/infoview/Article_353.html>sql语句解决分页问题日期:2005年1月17日 作者:treemon2004 人气:2203 查看:[大字体 中字体 小字体]select top @pagesize b.* from (select top @tre_pagesize 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 orde…
Hibernate 可以实现分页查询 如下 Query q = session.createQuery("from Cat as c"); q.setFirstResult(10000); q.setMaxResults(20); List l = q.list(); 生成的sql 语句为 select top 10000 .... from Cat as c 分析:Hibernate 获取到 10000条记录过后再筛选出符合条件的20条记录. 再来看看Hibernate 的 dial…
一起是用oracle数据库..感觉oracle数据库强大.查询速度是杠杠的.换了家公司用的是SQL SERVICE.以前用了1年现在捡回以前的记忆.动手写了动态SQL过存储过程分页.感觉和oracle语法不太一样外.其他感觉没啥区别.. 这个是通用存储过程.但是有一个问题我没解决就是条件怎么通用写.我条件都是拼接字符串感觉很不安全.不晓得博友门有木有什么解决方案 不多说了直接上代码. GO IF (SELECT COUNT(*) FROM sysobjects s WHERE s.[type]=…
使用传入的总记录数实现一条sql语句完成分页查询     问题:在传统的分页查询的实现中不可避免的需要两条sql语句,一条用于查询数据一条用于查询总记录数.如下面的实际代码所示: Img1 当然如果使用存储过程的话是可以渐少一次数据库来回的,但是它依然是两条sql语句,一条查数据一条查总记录数.但我们在架构层面拒绝使用存储过程,因为它将逻辑分散在了应用程序和数据库中,不好维护,并且在SqlServer2008中也没有足够的证据证明存储过程更高效. 很多人的直觉认为查询总记录数的那行没有必要,但是…
在显示记录条目时往往要用到分页,一种常用的办法是利用各种数据库自带的定位接口对原始查询语句进行改写,从而只取出特定范围的某些记录.不同的数据库,查询定位接口是不一样的,下面做一汇总: 数据库 分页查询语句 说明 MySql    "QUERY_SQL limit ?,?"             使用limit关键字,第一个"?"是起始行号,  第二个"?"是返回条目数 Oracle SELECT * FROM  ( SELECT A.*, RO…
Sql Server2005通用分页存储过程 CREATE PROCEDURE [dbo].[Common_GetPagedList] ( @TableName nvarchar(100), --表名 @ColumnNames nvarchar(1000) = '*', --字段名集合(全部字段为*,其它逗号分隔) @OrderClause nvarchar(1000), --排序从句(不包含order by) @WhereClause nvarchar(1000) =N' 1=1 ',   …
Oracle PL/SQL分页的存储过程 Oracle,分页,存储过程三个词结合起来,来个综合点的小练习,运用之前的PL/SQL创建一个分页的存储过程,仅仅须要简单几步就可以. 1.声明一个引用游标 create or replace package cur_ref_type as-- is or as can be used type cur_ref is ref cursor; end; 2.编写存储过程 create or replace procedure divideByPge (ta…
SELECT LPAD(,'*.') "LPAD example" FROM DUAL; 1.分页查询 (1)方法一:使用  between  and 来实现分页 select * from ( select emp.*,rownum rn from emp ) and (2)方法二:使用 rownum 来实现分页 select * from ( select emp.*,rownum rn from emp ) (3)方法三:使用rownum 三层来实现分页 select * fro…
假设当前是第PageNo页,每页有PageSize条记录,现在分别用Mysql.Oracle和SQL Server分页查询student表. 1.Mysql的分页查询: SELECT * FROM student LIMIT (PageNo ) * PageSize,PageSize; 理解:(Limit n,m)  =>从第n行开始取m条记录,n从0开始算. 2.Oracel的分页查询: SELECT * FROM ( SELECT ROWNUM rn ,* FROM student WHER…
1.平时分页查询都比较多针对一个表的数据 而这个分页查询是针对连表查询的 ,这也是我网上改版别人的sql语句 先在数据库新建一个存储过程 拷贝以下代码 CREATE PROCEDURE [dbo].[usp_PageLF] (@tblName varchar(255), -- 表名@tblName1 VARCHAR(255),--表名 连表字符串 @strGetFields varchar(1000) = '*', -- 需要返回的列@strGetFields1 varchar(1000) =…
http://www.cnblogs.com/qqlin/archive/2012/11/01/2745161.html 1.引言 在列表查询时由于数据量非常多,一次性查出来会非常慢,就算一次查出来了,也不能一次性显示给客户端,所以要把数据进行分批查询出来,每页显示一定量的数据,这就是数据要分页. 2.常用的数据分页方法 我们经常会碰到要取n到m条记录,就是有分页思想,下面罗列一下一般的方法. 我本地的一张表 tbl_FlightsDetail,有300多W记录,主键 FlightsDetail…
今天无聊和朋友讨论分页,发现网上好多都是错的.网上经常查到的那个Top Not in 或者Max 大部分都不实用,很多都忽略了Order和性能问题.为此上网查了查,顺带把2000和2012版本的也补上了. 先说说网上常见SQL的错误或者说局限问题 select top 10 * from table1 where id not in( select top 开始的位置 id from table1) 这样的确是可以取到分页数据,但是这是默认排序的,如果要按其中一列排序呢?那order by 加在…
查询全部: SELECT P3.ID, P3.Name, P3.AddTimeFROM (SELECT Name, MAX(AddTime) AS MaxAddTime FROM Product AS P1 GROUP BY Name) AS P2INNER JOIN Product AS P3 ON P2.Name = P3.NameORDER BY P2.MaxAddTime DESC, P3.AddTime DESC, P3.ID DESC 正反TOP方法的分页(每页5行,查第5页,即第2…
背景 系统中使用了jqgrid的展示,现在要处理10w+的数据量 现状 使用了全查询的,查询到了10w+的数据放到了datatable中,每次页面刷新需要9秒多,并且传递给另一个dll来处理一些事情.偶尔会出现StackOverFlow的异常问题,但是频率较大. 分析 现有的就有两个问题需要解决: 性能问题 StackOverFlow的异常问题 起始 性能问题经过调查,sql语句查询完成之后至少4秒钟左右,因为是全查询,所以把尽力的条件都做了,效果不明显. 然后考虑用sql server的row…
sql 分页 -- Region Parametersdeclare @pageindex int set @pageindex=2set @pagesize=10 DECLARE @p0 Int = ((@pageindex-1)*@pagesize)+1 --11 DECLARE @p1 Int =((@pageindex-1)*@pagesize)+@pagesize --20 @pagesize --10 -- AND @p0 + @p1 ORDER BY [t1].[ROW_NUMBE…
每每面试,总会有公司问到分页.在下不才,在这里写几种分页,望路过的各位大神尽情拍砖. 先从创建数据库说起.源码如下 一.创建数据库 /********************************************************************** 一.创建数据库DBTest @author: Alex Tian Create Date: 2014-03-19 *******************************************************…
SQL SERVER2012在ORDER BY 子句中加入了新元素offset,允许用户在排序完成的结果集中自定义输出行范围,大大简化了分页SQL的书写方式和效率. SQL SERVER2012在ORDER BY 子句中加入了新元素offset,允许用户在排序完成的结果集中自定义输出行范围,大大简化了分页SQL的书写方式和效率.以下是与以前的两种分页方式的简单对比 use master go set nocount on go set showplan_text on go --2012的OFF…
1.概述 在网页中如果显示的数据太多就会占据过多的页面,而且显示速度也会很慢.为了控制每次在页面上显示数据的数量,就可以利用分页来显示数据. 2.技术要点 在SQL Server中要实现SQL分页,需要使用子查询来获取上一页的数据进行对比,进而获取最新的数据.使用子查询获取分页数据的语法格式如下: "SELECT TOP [pageSize] * FROM [table] WHERE id NOT IN( SELECT TOP [preNum] id FROM [table] ORDER BY…
 IIndexDao package com.ucap.netcheck.dao; import com.ucap.netcheck.combination.beans.IndexCombinationBean;import com.ucap.netcheck.common.Page;import com.ucap.netcheck.common.dao.GenericDao;import com.ucap.netcheck.entity.Site; /**    * @Title: IIn…
以前用到数据库存储过程分页的时候都是用 not in 但是最近工作的时候,随着数据库记录的不断增大,发现not in的效率 真的不行 虽然都设置了索引,但是当记录达到10w的时候就发现不行了,都是需要好几秒钟,受不了了 所以就想换个方法,直接找到需要的页面的数据库记录的第一个ID,当然这个id是有索引,唯一的 而且是主键,这个也是网上说到的最快的一个方法 ^_^,据说比游标更快(我没用过游标) CREATE PROCEDURE sp_Image_List_ByCategoryID3 (  @ro…
//实现层 ---------------------------------------------------------分割线--------------------------------------------------------- public List<UserModel> ShowListPage(int pageindex, int pagesize) { string sql = string.Format("select top({0}) *from (se…
在应用程序的开发中,如果数据库中的数据量过于的庞大,则需要针对查询数据做分页处理,取出对应分页中的数据,在Sqlserver分页的语句写法中,有两种比较常用,一种是数据表中含有自增量Id的情况,可以根据Id的大小顺序进行分页,另一种是数据库中不存在Int类型的Id的情况,此时就需要通过Row_Number函数来实现分页. (1)数据表中存在自增量Id的情况 假设我们查询的表名称为Student,包含的字段有:Id(Id号,自增变量).Name(姓名).BirthDay(出生日期).按出生日期从早…
假设当前是第PageNo页,每页有PageSize条记录,现在分别用Mysql.Oracle和SQL Server分页查询student表. 1.Mysql的分页查询: 1 SELECT 2 * 3 FROM 4 student 5 LIMIT (PageNo - 1) * PageSize,PageSize; 理解:(Limit n,m)  =>从第n行开始取m条记录,n从0开始算. 2.Oracel的分页查询: 1 SELECT 2 * 3 FROM 4 ( 5 SELECT 6 S.*,…
最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServerProfiler把语句抓取了上来. 用ROW_NUMBER()进行分页 我们看看现场抓上来的分页语句: select top 20 a.*,ag.Name as AgentServerName,,d.Name as MgrObjTypeName,l.UserName as userName from…
1.两种方式 1.1:row_number() over()函数 1.2:OFFSET ....FETCH OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS } 指定在从查询表达式中开始返回行之前,将跳过的行数.OFFSET 子句的参数可以是大于或等于零的整数或表达式.ROW 和 ROWS 可以互换使用. FETCH { FIRST|NEXT } <行计数表达式> { ROW|ROWS } ONLY 指…
一.SQL Server 2012使用OFFSET/FETCH NEXT分页,比SQL Server 2005/2008中的RowNumber()有显著改进.今天特地作了简单测试,现将过程分享如下: DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE SET STATISTICS IO ON; SET STATISTICS TIME ON; GO DECLARE @page INT, @size INT , ;WITH cte AS ( SELECT TOP (@p…
假如tb_customer表中的数据量非常大,在显示时要分页显示而且每页只显示10条信息.为了效果我们取第三页的数据. 方法一:遍历两次表,取不同的数据. select top 10 * from tb_customer(nolock)where c_no not in(select top 20 c_no from tb_customer)order by c_no 方法解析:方先取出前20条的c_no(前两页),排除前20条数据的c_no,然后在剩下的数据里面取出前10条数据. 缺点:遍历表…
发现网上好多都是错的.网上经常查到的那个Top Not in 或者Max 大部分都不实用,很多都忽略了Order和性能问题.为此上网查了查,顺带把2000和2012版本的也补上了. 先说说网上常见SQL的错误或者说局限问题 1 2 3 4 5 select top 10 * from table1 where id not in(     select top 开始的位置 id     from table1) 这样的确是可以取到分页数据,但是这是默认排序的,如果要按其中一列排序呢?那order…