当我们显示列表信息的时候,我们常常以分页形式显示,当然在ASP.NET中的ListView和GridView控件等都自带了分页功能,但是效率很低,无法适用大量数据,并且灵活性不高。因而我们一般都使用第三方分页控件或者自己编写分页程序。那么在基于ADO.NET中实现自定义分页的第一步也就是最关键一步必然是要写分页SQL语句,而且语句效率要高。当然本文的一个目的就是学习编写分页查询语句,另一个目的则是帮助初学者更深入了解SELECT语句。
那么本文的一个查询示例是查询第11-15条记录,即每页5条,查第3页包含的结果集。查询的视图名为LeaveWordView,该视图有个名为ID的整型自增主键字段。
好了,我现在要引出的第一种写法呢是使用NOT IN关键字。
--IN 和 NOT IN,效率较低
--查询第11-15条记录,后面的语句即可替换为ADO.NET中执行Command的CommandText
SELECT TOP 5 * FROM LeaveWordView WHERE ID NOT IN(SELECT TOP 10 ID FROM LeaveWordView)
--SELECT TOP PageSize * FROM LeaveWordView WHERE ID NOT IN(SELECT TOP (PageIndex-1)*PageSize ID FROM LeaveWordView)
这条语句的原理是先查询1-10条记录的ID,然后再查询ID不属于这1-10条记录的ID,并且只需要5条记录,因为每页大小就是5,这就是获取到的第11-15条记录,这是非常简单的一种写法。另外IN语句与NOT IN语句类似,这是NOT IN的写法,但是显然达不到我们的需求,因为效率太低。所以我们接着看第二种写法。
第二种写法也是相当易于理解,通过若干次升序与降序实现。
--通过升序与降序方式进行查询分页
SELECT * FROM(
SELECT TOP 5 * FROM(
SELECT TOP 15 * FROM LeaveWordView ORDER BY ID ASC)
AS TEMP1 ORDER BY ID DESC)
AS TEMP2 ORDER BY ID ASC
这条语句首先查询前15条记录,然后在倒序查询前5条记录(即倒数5条记录),这个时候就已经获取到了11-15条记录,但是他们的顺序是倒序,所以最后又进行升序排序。
接下来看第三种写法,采用MAX(ID)函数。
--MIN()函数和MAX()函数的使用
--id > 第(PageIndex-1)*PageSize条记录的id AND id <= 第PageIndex*PageSize条记录的id
SELECT TOP 5 * FROM LeaveWordView WHERE ID>
(SELECT MAX(ID) FROM(SELECT TOP 10 ID FROM LeaveWordView ORDER BY ID) AS TEMP1) --(第10条的id)
这个理解起来也简单,先把第十条记录的id找出来(当然这里面是直接使用MAX()进行查找,MIN()函数的用法也是类似的),然后再对比取比第十条记录的id大的前5条记录即为我们需要的结果
OK,我们了解完了上述三种分页查询语句后,我来看最后一种,也是我本人推荐使用的一种,使用ROW_NUMBER。我记得Oracle有个ROWID,使得我们的查询更方便,因为我们很多时候就比较郁闷于整型的ID字段不连续,导致了原本可以使用很简单很高效的一些SQL语句查询变成了较为复杂。而到SQL Server2005出来的时候,类似的功能实现了,那便是ROW_NUMBER,ROW_NUMBER后面必须跟着OVER(ORDER BY [FIELD]),我们来看具体的写法。
--用行号(ROW_NUMBER)查询,比较高效的查询方式,只有在SQL Server2005或更高版本才支持
--SELECT ROW_NUMBER() OVER(ORDER BY ID) AS ROWID FROM LeaveWordView
SELECT * FROM(
SELECT TOP 15 ROW_NUMBER() OVER(ORDER BY ID ASC) AS ROWID,*
FROM LeaveWordView) AS TEMP1
WHERE ROWID>10
在这里面需要注意的是OVER的括号里面可以写多个排序字段,比如:OVER(ORDER BY CreatedTime,ID)。这条语句是查询前15条记录,然后取出ROWID=10以后的记录。
以上是4中常用分页查询语句,其实他们的效率在万级别一下数据的时候,效率相差并不大,但是在处理上百万数据时,毫无疑问我们将选择最后一种方式。本文一个目的是探讨分页查询,另一个呢则是分享SELECT语句的一些写法。
相关推荐
sql Server 分页查询的一个例子 献给初学者!!!!
该实例已经在IIS+ASP+SQL Server环境中进行了调试,可以供Web初学者直接使用。 标题解释 本文标题“ASP+SQL Server带条件查询的分页存储过程及其ASP调用实例”说明了本文的主要内容,即使用ASP和SQL Server实现带...
这个"SSH框架+SQLServer实现分页的小项目"提供了一个基础的分页实现示例,适合初学者了解SSH框架如何与数据库交互,以及如何在Java Web应用中实现分页功能。通过研究这个项目,开发者可以学习到SSH框架的整合、...
标题中的“jdbc分页实例sqlserver2000”指的是使用Java Database Connectivity (JDBC) API来实现数据库分页查询的示例,特别是在SQL Server 2000这个特定的数据库管理系统上。JDBC是Java中用于与各种类型数据库交互...
《Microsoft SQL Server 2005技术内幕:T-SQL查询》是一本深入解析SQL Server 2005中T-SQL查询语言的专业书籍。T-SQL(Transact-SQL)是微软对标准SQL的扩展,是SQL Server的核心组件,用于数据库管理、数据查询和...
在SQL Server中实现数据分页是一项常见的需求,尤其是在处理大量数据时,为了提高查询效率和用户体验,分页显示数据成为了数据库设计中的一个关键点。在给定的代码示例中,作者通过创建一个存储过程`proc_cursor`来...
本篇将深入讲解SQL分页查询的原理,并结合示例进行详细说明。 首先,让我们了解基本的SQL分页查询方法。在SQL Server中,我们可以利用`TOP`关键字来限制返回的行数,从而实现分页。假设我们有一个名为`Student`的表...
本教程将详细介绍一个简单的SQL分页实现,适合初学者理解。 ### 基本原理 SQL分页的核心是通过`ROW_NUMBER()`函数来生成每个数据行的序列号,再结合`BETWEEN`操作符来筛选出特定范围内的行。在SQL Server中,我们...
### JSP分页技术详解:初学者的完美指南 #### 引言 在现代Web开发中,数据展示的效率和用户体验至关重要。对于大型数据库或数据集的处理,一次性加载所有数据不仅消耗大量资源,还可能导致页面加载缓慢,严重影响...
【标题】"jsp/servlet分页带查询示例"是一个典型的Web开发教程,它涵盖了如何在Java Web应用...它涵盖了从数据库配置、SQL查询、Servlet处理请求到JSP展示结果的完整流程,对于初学者来说是一个非常实用的学习资源。
对于初学者来说,这是一个很好的学习资源,可以帮助他们理解JSP的使用以及如何与数据库进行连接和操作。同时,这也提醒我们,在实际开发中,为了保持代码的清晰和可维护性,通常需要采用更先进的MVC架构,如Model2...
### SQL查询语句实用大全(适合SQL的初学者以及经常写SQL的人) #### 一、属性列操作 ##### 1. 去除重复行 **去除重复行**是SQL中一个非常重要的功能,通常使用`DISTINCT`关键字来实现。`DISTINCT`可以帮助我们从...
这个经典分页类提供了基础的分页功能,初学者可以通过学习这个类,理解分页的实现原理,并在此基础上进行定制和扩展,满足实际项目的需求。 8. **好用分页类.txt** 这个文本文件可能包含了分页类的源代码,初学者...
### SQL 数据库实现分页技术教程 #### 一、引言 随着互联网技术的发展,Web应用程序需要处理的数据量日益庞大。在数据展示方面,如果一...希望本文能为初学者提供有益的指导,帮助他们更好地理解和运用数据分页技术。
《Microsoft SQL Server 2008技术内幕:T-SQL查询》是一本深入探讨SQL Server 2008中T-SQL(Transact-SQL)查询的权威书籍。T-SQL是SQL Server的主要编程语言,用于执行数据操作、管理数据库以及创建复杂的存储过程...
本教程主要针对初学者,深入讲解如何在ASP.NET环境中结合SQL Server 2000实现Ajax分页功能。 首先,我们需要了解Ajax的基础概念。Ajax,即Asynchronous JavaScript and XML,它不是一种单一的技术,而是一组用于...
- **SQL分页**:通过编写特定的SQL语句来实现分页查询,如使用LIMIT关键字。 - **HQL分页**:通过Hibernate Query Language(HQL)提供的分页方法实现。 #### 三、SSH分页案例分析 本节将通过具体的代码示例,展示...
总的来说,这个项目是一个基础但实用的教程,适合初学者学习ASP.NET和SQL Server的集成,以及三层架构的使用。通过实践,开发者可以深入理解数据驱动的Web应用开发流程,为后续更复杂的项目打下坚实的基础。
对于初学者,理解这个项目的实现方式有助于提升对Web开发和数据库操作的理解;对于经验丰富的开发者,这也是一个优化和扩展已有系统的好例子。通过学习和实践,我们可以更好地掌握SpringMVC和MyBatis的精髓,提升...
在这个"sql.rar_jsp sql 分页"的压缩包中,我们关注的是如何通过JSP(JavaServer Pages)来展示数据库中的数据,并实现数据的分页功能。这对于初学者来说是一个非常实用的教程,因为它涉及到实际项目开发中常见的...