SQL语句实现数据分页(SQLServer)
SQLServer的分页依靠的是top这个属性。
1.分页方案一:(利用Not In和SELECT TOP分页)
SELECT TOP 页大小 *
FROM TestTable
WHERE (ID NOT IN
(SELECT TOP 页大小*页数 id
FROM 表
ORDER BY id))
ORDER BY ID
2.分页方案二:(利用ID大于多少和SELECT TOP分页)
SELECT TOP 页大小 *
FROM TestTable
WHERE (ID >
(SELECT MAX(id)
FROM (SELECT TOP 页大小*页数 id
FROM 表
ORDER BY id) AS T))
ORDER BY ID
常用的是方案1.这个不需要多说!
方案2有局限性。
hibernate对于分页就比较直接,Query接口提供有封装好的接口。
Query q = session.createQuery("from Cat as c");
q.setFirstResult(20);
q.setMaxResults(10);
List l = q.list(); 表示从第20数据开始,读取10条数据出来。
setFirstResult()从第几条数据开始读取
setMaxResults(100)读取几条数据出来
SQL语句实现数据分页(MySQL)
MySQL实现数据分页依靠的是limit这个属性!
1. 标准查询语句:
select * from table(表名) limit startPos,pageSize
小结:
1.startPos:定义当前页起始位置 注意:当前页的起始位置只能在当前页确定之后才能定义;
2.pageSize:定义每页显示数据的条数
3.如果给定2个参数,第一个指定要返回的第一行的偏移量,第二个指定返回行的最大数目。初始行的偏移量是0(不是1)。
如:select * from table LIMIT 5,10; 这个查询出来的是第6到15之间的10条数据
如果给定一个参数,它指出返回行的最大数目。
如:select * from table LIMIT 5; 这个查询出来的是前5条数据
(LIMIT n等价于LIMIT 0,n)
DB2的主要用到函数row_number() over()进行处理。
select * from ( select row_number() over() row, tmp.* from (select * from user ) tmp) where row>=40 and row<=50
这样的sql,即可取出用户表中第40-50条记录。
SQL语句实现数据分页(oracle)
oracle是依靠rownum这个属性来分页的!
1. 标准的rownum分页查询使用方法:
select *
from (select c.*, rownum rn from content c)
where rn >= 1 and rn <= 5
2. 排序的分页
select *
from (select rownum rn, t.*
from (select title, addtime from content order by addtime desc/asc) t)
where rn >= 1 and rn <= 5
总结:
rownum是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2
,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀。
举例:
例如表:student(学生)表,表结构为:
ID char(6) --学号
name VARCHAR2(10) --姓名
create table student (ID char(6), name VARCHAR2(100));
insert into sale values(''200001'',‘张一’);
insert into sale values(''200002'',‘王二’);
insert into sale values(''200003'',‘李三’);
insert into sale values(''200004'',‘赵四’);
commit;
1.等值查询
如果希望找到学生表中第一条学生的信息,可以使用rownum=1作为条件。但是想找到学生表中第二条学生
的信息,使用rownum=2结果查不到数据。因为rownum都是从1开始,但是1以上的自然数在rownum做等于判
断是时认为都是false条件,所以无法查到rownum = n(n>1的自然数)。
select rownum,id,name from student where rownum=1;
2.大于某值的查询条件
如果想找到从第二行记录以后的记录,当使用rownum>2是查不出记录的,原因是由于rownum是一个总是从
1开始的伪列,Oracle 认为rownum> n(n>1的自然数)这种条件依旧不成立(不能对rownum用">")。可以
使用以下的子查询方法来解决。注意子查询中的rownum必须要有别名,否则还是不会查出记录来,这是因
为rownum不是某个表的列,如果不起别名的话,无法知道rownum是子查询的列还是主查询的列。
select * from(select rownum no ,id,name from student) where no>2;
3.小于某值的查询条件
select rownum,id,name from student where rownum <3 (取出前两条数据)
这下就可以解决取出第二条数据的SQl了
select * from (select rownum no,id,name from student where rownum<3 ) where no >=2;
4.rownum和排序
select rownum ,id,name from (select * from student order by name);
oracle rownum的使用(转)
对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀。
举例说明:
例如表:student(学生)表,表结构为:
ID char(6) --学号
name VARCHAR2(10) EN