ORACLE:
SELECT FROM (SELECT A, ROWNUM RN FROM (
select from table_name t
) A WHERE ROWNUM <= 2001 )WHERE RN >0
SELECT FROM (SELECT A, ROWNUM RN FROM (
select from table_name t
) A WHERE ROWNUM <= 2020--- bigRowNum
WHERE RN >2010--- smallRowNum
SQSERVER:
select top 200 from table_name
select top 200 rownum as r from table_name where r>200
MYSQL:
select from table_name limit 0,200;--startrow,pagesize
select from table_name limit 200,200;--startrow,pagesize
1:新建一个数据库
create database 数据库名
2:新建一个表
create table 表名
(
字段名 类型 是否为空
)
3:删除一个表
drop table 表名
4:增加一个记录
insert 表名 [(字段)] values ( 内容 )
5:删除一个记录
delete [from] 表名 where 条件
6、修改一个记录
update 表名 set 字段名=更新内容 where 条件
7、在原表中增加一个字段
alter table 表名 add column 字段名 类型
8:在原表中删除一个字段
alter table 表名 drop column 字段名
9、查询一个表记录
select from 表名
10、带条件查询一个表记录
select from 表名 where =条件
try{
con=DriverManagergetConnection
("jdbc:microsoft:sqlServer://593969222;databaseName=sq_my26","sq_my26","aa531233");
st=concreateStatement(1004,1007);
rs=stexecuteQuery("select from wulin");
rsafterLast();
String s="";
for(int i=0;i<500;i++){
if(rsprevious()){
s+=rsgetString(1)+"\t"+rsgetString(2)+"\t"+rsgetString(3)+"\t"+rsgetString(4)+"\t"+rsgetString(5)+"\t"+rsgetString(6)+"\t"+rsgetString(7)+"\n";
}
}
jTextArea1setText(s);
rsclose();
stclose();
conclose();
}catch(SQLException e2){
JOptionPaneshowMessageDialog(this,"123");
}
临近春节,心早已飞了不在工作上了,下面小编给大家整理些数据库的几种分页查询。
Sql
Sever
2005之前版本:
select
top
页大小
from
表名
where
id
not
in
(
select
top
页大小(查询第几页-1)
id
from
表名
order
by
id
)
order
by
id
例如:
select
top
10
--10
为页大小
from
[TCCLine][dbo][CLine_CommonImage]
where
id
not
in
(
--40是这么计算出来的:10(5-1)
--
页大小(查询第几页-1)
select
top
40
id
from
[TCCLine][dbo][CLine_CommonImage]
order
by
id
)
order
by
id
结果为:
Sql
Sever
2005及以上版本,多了个分页查询方法:
/
firstIndex:起始索引
pageSize:每页显示的数量
orderColumn:排序的字段名
SQL:可以是简单的单表查询语句,也可以是复杂的多表联合查询语句
/
select
top
pageSize
o
from
(select
row_number()
over(order
by
orderColumn)
as
rownumber,
from(SQL)
as
o
where
rownumber>firstIndex;
例如:
select
top
10
numComImg
from
(
select
row_number()
over(order
by
id
asc)
as
rownumber,
from
(select
FROM
[TCCLine][dbo][CLine_CommonImage])
as
comImg)
as
numComImg
where
rownumber>40
结果:
这两个方法,就仅仅是多了一列
rewnumber
吗?当然不是,来看下内部差别吧:
在两个SQL上,分别加入以下SQL,并使用MS的“包括执行计划”,便于查看执行详情:
SET
STATISTICS
TIME
ON
GO
要执行的SQL:
SET
STATISTICS
TIME
ON
GO
select
top
10
numComImg
from
(
select
row_number()
over(order
by
id
asc)
as
rownumber,
from
(select
FROM
[TCCLine][dbo][CLine_CommonImage])
as
comImg)
as
numComImg
where
rownumber>40
SET
STATISTICS
TIME
ON
GO
select
top
10
--10
为页大小
from
[TCCLine][dbo][CLine_CommonImage]
where
id
not
in
(
--40是这么计算出来的:10(5-1)
--
页大小(查询第几页-1)
select
top
40
id
from
[TCCLine][dbo][CLine_CommonImage]
order
by
id
)
order
by
id
执行之后,查看执行计划:
看得出,两个同样功能的SQL,执行时,使用
row_number()
的,要比是用
纯TOP方式的,查询开销少得多,上图显示
28:72,纯top方式,使用了两次聚集扫描。
再来看下执行时间信息:
row_number()方式的:
纯top方式:
相比之下,还是row_number()解析函数效率比较高写。
以上所述是小编给大家分享的SQLSERVER分页查询关于使用Top方式和row_number()解析函数的不同,希望对大家有所帮助。
SQL Server从2005开始就支持row_number over一系列的分析函数,故应该是可以执行的。
猜测:不是SQL Server版本的问题,可能是你的数据兼容级别为SQL Server 2000 (80)的,而SQL Server 2000对分析函数是不支持的。
或者,使用更新的版本。我的就是Microsoft SQL Server Developer Edition, 900403500
哇,这个如果用select top 7 from news where newsID not in (select top %d newsID from news 来查的话我估计CPU会用100%,建议用VS中自代的分页功能,有服务资源管理器,点连接数据库,本机,测试成功后打开数据库,直接把表拖到网页中,就会出现几个多选框,点启动分页,和排序就可以了
//下面是带数据库连接池的分页beans,比较通用
package xcfiutily;
import javaio;
import javasql;
import javaxsql;
import javaxnaming;
public class common_pages{
Context ctx=null;
Connection cnn=null;
Statement stmt=null;
ResultSet rs=null;
ResultSet rs1=null;
public void close_pages(){
try
{
if(rs!=null)
rsclose();
if(stmt!=null)
stmtclose();
if(cnn!=null)
cnnclose();
if(ctx!=null)
ctxclose();
}catch(Exception e){Systemoutprintln(etoString());}
}
public ResultSet get_pages(String table_name,String item_name,int current_page,int page_size){
try
{
ctx=new InitialContext();
if(ctx==null)
throw new Exception("没有匹配的环境");
DataSource ds=(DataSource)ctxlookup("java:comp/env/jdbc/my_mysql");
if(ds==null)
throw new Exception("没有匹配数据库");
cnn=dsgetConnection();
int from_no=0;
int end_no=0;
from_no=(current_page-1)page_size;
end_no=page_size;
String sql="select from "+table_name+" order by "+item_name+" desc limit "+IntegertoString(from_no)+","+IntegertoString(end_no);
stmt=cnncreateStatement(ResultSetTYPE_SCROLL_SENSITIVE,ResultSetCONCUR_READ_ONLY);
rs=stmtexecuteQuery(sql);
}
catch(Exception E){Systemoutprintln(EtoString());}
return rs;
}
public ResultSet get_pages_with_count(String table_name,String item_name,int current_page,int page_size){
try
{
ctx=new InitialContext();
if(ctx==null)
throw new Exception("没有匹配的环境");
DataSource ds=(DataSource)ctxlookup("java:comp/env/jdbc/my_mysql");
if(ds==null)
throw new Exception("没有匹配数据库");
cnn=dsgetConnection();
int from_no=0;
int end_no=0;
int count=0;
from_no=(current_page-1)page_size;
end_no=page_size;
String sql="select count() as count from "+table_name;
stmt=cnncreateStatement(ResultSetTYPE_SCROLL_SENSITIVE,ResultSetCONCUR_READ_ONLY);
rs1=stmtexecuteQuery(sql);
if(rs1next()){
count=rs1getInt("count");
}
rs1close();
sql="select ,"+count+" as count from "+table_name+" order by "+item_name+" desc limit "+IntegertoString(from_no)+","+IntegertoString(end_no);
stmt=cnncreateStatement(ResultSetTYPE_SCROLL_SENSITIVE,ResultSetCONCUR_READ_ONLY);
rs=stmtexecuteQuery(sql);
}
catch(Exception E){Systemoutprintln(EtoString());}
return rs;
}
}
以上就是关于MySQL、SQLServer、和ORCALE数据库的分页查询sql全部的内容,包括:MySQL、SQLServer、和ORCALE数据库的分页查询sql、SQL Server数据库用sql语句实现分页查询 (从M条数据开始,查找N条记录。sqlserver数据库。请举例说明。)、数据库分页查询语句怎么写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)