分页语句-取出sql表中第31到40的记录(以自动增长ID为主键)

sql server方案1:

select top 10 * from t where id not in (select top 30 id from t order by id ) orde by id

sql server方案2:

select top 10 * from t where id in (select top 40 id from t order by id) order by id desc

mysql方案:select * from t order by id limit 30,10

oracle方案:select * from (select rownum r,* from t where r<=40) where r>30

--------------------待整理进去的内容-------------------------------------

pageSize=20;

pageNo = 5;

1.分页技术1(直接利用sql语句进行分页,效率最高和最推荐的)

mysql:sql = "select * from articles limit " + (pageNo-1)*pageSize + "," + pageSize;

oracle: sql = "select * from " +

"(select rownum r,* from " +

"(select * from articles order by postime desc)" +

"where rownum<= " + pageNo*pageSize +") tmp " +

"where r>" + (pageNo-1)*pageSize;

注释:第7行保证rownum的顺序是确定的,因为oracle的索引会造成rownum返回不同的值

简洋提示:没有order by时,rownum按顺序输出,一旦有了order by,rownum不按顺序输出了,这说明rownum是排序前的编号。如果对order by从句中的字段建立了索引,那么,rownum也是按顺序输出的,因为这时候生成原始的查询结果集时会参照索引表的顺序来构建。

sqlserver:sql = "select top 10 * from id not id(select top " + (pageNo-1)*pageSize + "id from articles)"

DataSource ds = new InitialContext().lookup(jndiurl);

Connection cn = ds.getConnection();

//"select * from user where id=?"  --->binary directive

PreparedStatement pstmt = cn.prepareSatement(sql);

ResultSet rs = pstmt.executeQuery()

while(rs.next())

{

out.println(rs.getString(1));

}

2.不可滚动的游标

pageSize=20;

pageNo = 5;

cn = null

stmt = null;

rs = null;

try

{

sqlserver:sql = "select  * from articles";

DataSource ds = new InitialContext().lookup(jndiurl);

Connection cn = ds.getConnection();

//"select * from user where id=?"  --->binary directive

PreparedStatement pstmt = cn.prepareSatement(sql);

ResultSet rs = pstmt.executeQuery()

for(int j=0;j<(pageNo-1)*pageSize;j++)

{

rs.next();

}

int i=0;

while(rs.next() && i<10)

{

i++;

out.println(rs.getString(1));

}

}

cacth(){}

finnaly

{

if(rs!=null)try{rs.close();}catch(Exception e){}

if(stm.........

if(cn............

}

3.可滚动的游标

pageSize=20;

pageNo = 5;

cn = null

stmt = null;

rs = null;

try

{

sqlserver:sql = "select  * from articles";

DataSource ds = new InitialContext().lookup(jndiurl);

Connection cn = ds.getConnection();

//"select * from user where id=?"  --->binary directive

PreparedStatement pstmt = cn.prepareSatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,...);

//根据上面这行代码的异常SQLFeatureNotSupportedException,就可判断驱动是否支持可滚动游标

ResultSet rs = pstmt.executeQuery()

rs.absolute((pageNo-1)*pageSize)

int i=0;

while(rs.next() && i<10)

{

i++;

out.println(rs.getString(1));

}

}

cacth(){}

finnaly

{

if(rs!=null)try{rs.close();}catch(Exception e){}

if(stm.........

if(cn............

}

时间: 2024-11-05 18:20:35

分页语句-取出sql表中第31到40的记录(以自动增长ID为主键)的相关文章

怎么查询数据库中第30到40条记录呢? 通过ID,查询当前第30-40条记录 注意,ID不是顺序的

http://blog.csdn.net/lee576/article/details/5812347 http://bbs.csdn.net/topics/190070614

SQL UPDATE 语句:更新表中的记录语法及案例剖析

SQL UPDATE 语句 UPDATE 语句用于更新表中的记录. SQL UPDATE 语句 UPDATE 语句用于更新表中已存在的记录. SQL UPDATE 语法 UPDATE table_name SET column1=value1,column2=value2,... WHERE some_column=some_value; 请注意 SQL UPDATE 语句中的 WHERE 子句! WHERE 子句规定哪条记录或者哪些记录需要更新.如果您省略了 WHERE 子句,所有的记录都将被

SQL INSERT INTO 语句:向表中插入新记录语法及案例剖析

SQL INSERT INTO 语句 INSERT INTO 语句用于向表中插入新记录. SQL INSERT INTO 语句 INSERT INTO 语句用于向表中插入新记录. SQL INSERT INTO 语法 INSERT INTO 语句可以有两种编写形式. 第一种形式无需指定要插入数据的列名,只需提供被插入的值即可: INSERT INTO table_name VALUES (value1,value2,value3,...); 第二种形式需要指定列名及被插入的值: INSERT I

SQL DELETE 语句:删除表中的记录语法及案例剖析

SQL DELETE 语句 DELETE 语句用于删除表中的记录. SQL DELETE 语句 DELETE 语句用于删除表中的行. SQL DELETE 语法 DELETE FROM table_name WHERE some_column=some_value; 请注意 SQL DELETE 语句中的 WHERE 子句! WHERE 子句规定哪条记录或者哪些记录需要删除.如果您省略了 WHERE 子句,所有的记录都将被删除! 演示数据库 在本教程中,我们将使用 样本数据库. 下面是选自 "W

CREATE INDEX 语句用于在表中创建索引

CREATE INDEX 语句用于在表中创建索引. 在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据. 索引 您可以在表中创建索引,以便更加快速高效地查询数据. 用户无法看到索引,它们只能被用来加速搜索/查询. 注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新.因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引. SQL CREATE INDEX 语法 在表上创建一个简单的索引.允许使用重复的值: CREATE INDEX ind

sql语句查询同一表内多字段同时重复的记录 sql数据库重复记录删除

分享下用sql语句删除数据库中重复记录的方法.比如现在有一人员表 (表名:peosons) 若想将姓名.身份证号.住址这三个字段完全相同的记录查询出来select p1.* from persons p1,persons p2 where p1.id<>p2.id and p1.cardid = p2.cardid and p1.pname = p2.pname and p1.address = p2.address可以实现上述效果.几个删除重复记录的SQL语句 1.用rowid方法2.用gr

sql 表中列值转成字符串

DECLARE @STR VARCHAR(8000)SELECT @STR=ISNULL(@STR+',','')+weixinuser FROM (SELECT DISTINCT weixinuser FROM v_sysbinduser)AS TSELECT @STR declare @output varchar(8000)select @output = coalesce(@output + ',' , '') + weixinuser from v_sysbinduserprint @

SQL Server中如何实现遍历表的记录

SQL Server遍历表一般都要用到游标,SQL Server中可以很容易的用游标实现循环,实现SQL Server遍历表中记录. 但游标在实际的开发中都不推荐使用. 我们知道还可以借助临时表或表变量等来实现SQL Server遍历表 下例为用表变量来实现简单的循环: (直接复制到查询分析器中运行即可)1.           declare @temp table   2.           (   3.              [id] int IDENTITY(1,1),   4. 

“取出数据表中第10条到第20条记录”的sql语句+select top 用法

1.首先,select top用法: 参考问题  select top n * from和select * from的区别 select * from table --  取所有数据,返回无序集合 select top n * from table  -- 根据表内数据存储顺序取前n条,返回无序集合 select * from table order by id desc -- 取所有数据,按id逆序返回有序列表 select top n * from table order by id des