Ⅰ sqlserver中怎么分页查询
假设现在有这样的一张表:
CREATE TABLE test
(
id int primary key not null identity,
names varchar(20)
)
然后向里面插入大约1000条数据,进行分页测试
假设页数是10,现在要拿出第5页的内容,查询语句如下:
--10代表分页的大小
select top 10 *
from test
where id not in
Ⅱ sql server 分页
with a as(
select *,row_number over(order by id) rn from 表 where workernumber ='012'
)
select * from a where rn>1 and rn<100
Ⅲ sql server 怎么写分页的sql语句
ID:唯一标示列
number:一次读取的行数
page:第几页
select top(number)ID,字段 from 表 where 条件x And ID Not In (select top(number*page)ID,字段 from 表 where 条件X)
Ⅳ SQL Server数据分页的问题
//得到页号
int pageId=Integer.parseInt(request.getParameter("pageId"));
int begin=(pageId-1)*pageSize;
String select =request.getParameter("select");
String sqlLimit="";//分页sql语句
String sqlCount="";//总行数sql语句
ShowTravleInfoManager sm = new ShowTravleInfoManager();
//无条件分页查询所有景点信息
if(select.equals("all"))
{
sqlCount = "select count(*) from travleInfo";
sqlLimit="select top "+pageSize+" * from travleInfo t,areaInfo a where t.travleId not in " +
"(select top "+begin+" travleId from travleInfo) and t.areaId=a.areaId order by t.travleId";
}
一:分页的分类:
分页有真分页和假分页两种,
假分页即把所有数据一次性提取到内存中.再分页.
缺点:数据量太大.访问慢.
真分页则用SQL语句在数据库中提取本页数据到内存中. 缺点:程序不好移植.
二: 真分页作法:
一般是通过sql语句查询出指定页号的数据 .请注意数据库支持的关键字
1. sql server 用 top :前几行
2. oracle 用 rownum :行号之差
3. Mysql 用 limit ; 行号之差
三:测试:
表:
create table stuInfo-- 学生信息表
(
stuId varchar(20) primary key,
stuName varchar(20),
stuSex varchar(8),
stuAddress varchar(40)
);
insert into stuInfo values('A001','xie','男','湖南长沙');
insert into stuInfo values('A002','张飞','男','湖南长沙');
insert into stuInfo values('A003','王熙凤','男','湖南长沙');
insert into stuInfo values('A004','李逵','男','湖南长沙');
insert into stuInfo values('A005','张力','男','湖南长沙');
insert into stuInfo values('A006','张飞','男','湖南长沙');
insert into stuInfo values('A007','王凤','男','湖南长沙');
insert into stuInfo values('A008','李达','男','湖南长沙');
insert into stuInfo values('A009','xie','男','湖南长沙');
insert into stuInfo values('A010','张飞','男','湖南长沙');
insert into stuInfo values('A011','王熙凤','男','湖南长沙');
insert into stuInfo values('A012','李逵','男','湖南长沙');
insert into stuInfo values('A013','张力','男','湖南长沙');
insert into stuInfo values('A014','张飞','男','湖南长沙');
insert into stuInfo values('A015','王凤','男','湖南长沙');
insert into stuInfo values('A016','李达','男','湖南长沙');
select * from stuInfo;
在:MSSQL2005中的写法:
select top 5 * from stuInfo
where stuId not in
(select top 5 stuId from stuInfo)
order by stuId
--5:代表第2页
在:oracle中的写法:
--查询第1页数据. (当前页-1)*每页几行
select * from stuInfo where rownum<=1*5
minus
select * from stuInfo where rownum<=0*5;
在mysql中的写法:
select * from stuInfo limit 0,5;
select * from stuInfo limit 5,10;
具体用法:
一:在javaBean中,返回一个bean对象集合
public List getProctById(String id,int pageId,int pageNum)
{
Connection conn=null;
try
{ ArrayList li=new ArrayList();
int begin=(pageId-1)*pageNum;
String sql="select * from item where proctid='"+id
+"' limit "+begin+","+pageNum+"";
conn= ShopDB.getConnection();
Statement st= conn.createStatement();
java.sql.ResultSet rs= st.executeQuery(sql) ;
while(rs.next())
{
Item myitem=new Item();
myitem.setItemid(rs.getString("itemid"));
myitem.setListprice(rs.getFloat("listprice"));
myitem.setUnitcost(rs.getFloat("unitcost"));
myitem.setName(rs.getString("name"));
myitem.setDescrition(rs.getString("descrition"));
myitem.setImagepath(rs.getString("imagepath"));
li.add(myitem);
}
return li;
}
catch (Exception e) {
e.printStackTrace();
return null;
}finally{
ShopDB.colseConn(conn) ;
}
二:hibernate中:返回一个二维数组集合.
//真分页方法
public List findUserPageData(int pageId,int pageNum) {
try {
int comp=(pageId-1)*pageNum;
String sql = "select * from Userinfo limit "+comp+","+pageNum;
System.out.println(sql);
SQLQuery queryObject = getSession().createSQLQuery(sql);
return queryObject.list();
} catch (RuntimeException re) {
throw re;
}
}
public static void main(String[] args) {
try {
UserinfoDAO = new UserinfoDAO();
List list=.findUserPageData(1, 2);
System.out.println("大小:"+list.size());
for (int i = 0; i < list.size(); i++) {
Object kk[] =(Object[]) list.get(i);
System.out.println("姓名" + kk[1]);
}
Ⅳ SQLServer分页
create procere proc_dividePage
@pageIndex int, --用户点页数
@pageSize int, --每页显示多少行数据
@pageCount int output --总共显示多少页
as
declare @firstIndex int
declare @lastIndex int
declare @total int
set @firstIndex=(@pageIndex-1)*@pageSize+1
set @lastIndex=@pageSize*@pageIndex
select @total=count(*) from 表名
if(@total%@pageSize<>0)
begin
set @pageCount=@total/@pageSize+1
end
else
begin
set @pageCount=@total/@pageSize
end
select * from
(select row_number() over(order by 主键) as newColumn,* from 表名) as newTable
where newColumn between @firstIndex and @lastIndex
最后说一句:我没有测试环境,如果有编写错误,请及时提醒我,谢谢。