Oracle SQl语句使用rownum分页
“小布雷德”通过精心收集,向本站投稿了10篇Oracle SQl语句使用rownum分页,下面就是小编给大家整理后的Oracle SQl语句使用rownum分页,希望您能喜欢!
篇1:Oracle SQl语句使用rownum分页
ROWNUM:
说明:rownum是一个伪字段,标示查询字段的序号;
使用:select rownum 序号 from table
注意:
一、rownum 使用 '>' 号的问题
select * from emp where rownum>3、
查询不到结果
原因:rownum是在使用select查询的时候,自动生成的一串顺序号,
在每返回一条数据结果的时候,rownum就自动加一
当select 一条数据 rownum 为 1 不>3 记录被筛去
而下一条 数据 rownum 又是 1.。。。。。。。
解决:加一层嵌套
二、rownum 与 order by 同时使用会出现问题
rownum 是不支持order by 排序的。因为rownum是在排序之前取值的。
“在oracle中如果rownum与order by同在,是先rownum,然后再order by ”
oracle手册上说的:“即使select语句中一条简单的order by都可能会搞乱ROWNUM(因为ROWNUM是排序前分配给各行的)
如图所示:(RN 列顺序错误)
解决方式:
1、直接嵌套:(增加了两次查询,被嵌套的查询结果相当于视图,view中已经有rownum字段 所以可以使用 >号)
select t2.* from(--解决>号问题
select t1.*,ROWNUM rn from (--解决order by 的影响
select
k.bmxh,
k.byxxdm,
z.zgdm,
z.dqdm,
zd.zgmc,
zd.fz
from zgjf z
left join ks k on z.bmxh = k.bmxh
left join zgdm zd on z.zgdm = zd.zgdm
order by bmxh asc, z.zgdm asc
)t1
)t2where rn >2 and rn <10
2、使用:row_number over(order by COLUMN_NAME) 改变顺序,先执行了括号中的order by
select z.* ,row_number() over ( order by z.bmxh ) rn from zgjf z where rownum <10 and rownum >5
篇2:解决oracle使用rownum排序分页排序字段不唯一导致分页错误
解决oracle使用rownum排序分页排序字段不唯一导致分页错误
最近在写个列表组件ulynlist时候,测了下发现了个问题,在此记录下,
今天,列表组件调的时候,我试了下调下每个条数,每页一条,刚完成分页脚的插件时候,很高兴的点着,突然点到10来条时候发现怎么一直都是那条数据,还以为是前端插件写的有问题。后面再去看了下控制台的sql,截出sql去执行,发现还真是,从9到13都是同一个记录。
1SELECT * FROM(SELECT A.*, ROWNUM RN FROM(2select t.* from T_CAR_INFO t WHERE t.del='0' AND t.id = '003'3 ORDER BY CREATE_TIME desc) A WHERE ROWNUM <= 10)WHERE RN >= 10
正常情况来说,这个sql是很难发现有什么问题,在一般情况下,我们小流量系统这个CREATE_TIME经常都是唯一的,所以嘛,确实很难发现,
我用 CREATE_TIMEDESC排序,但是这个字段的值由于是数据库记录自己随便填,都是复制粘贴,结果很多记录都是一样的值。这个是典型的order by字段值不唯一造成分页记录混乱
怎么解决呢? 其实很简单,只要在排序的时候加一个值唯一的字段的就可以了。最好是id。改成如下发现一切正常了:
1SELECT * FROM(SELECT A.*, ROWNUM RN FROM(2select t.* from T_CAR_INFO t WHERE t.del='0' AND t.id = '003'3 ORDER BY CREATE_TIME desc,id) A WHERE ROWNUM <= 10)WHERE RN >= 10
篇3:Oracle关键字rownum的使用
Rownum是oracle提供的一个伪列,我们用的比较多的地方是在做分页的时候,
如果对rownum使用不当,往往会出现一些比较抓狂的现象。
假如有表结构如下:
tid tname ttype
5 T1 Q1
4 T4 Q1
3 T3 Q7
2 T2 Q2
1 T1 Q6
6 T6 Q1
7 T7 Q3
8 T8 Q3
9 T9 Q4
10 T10 Q5
执行语句:SELECT rownum,t.* FROM t_test t ORDER BY t.tid;
预期的结果应该是:
rownum tid tname ttype
1 1 T1 Q6
2 2 T2 Q2
3 3 T3 Q7
4 4 T4 Q1
5 5 T1 Q1
6 6 T6 Q1
7 7 T7 Q3
8 8 T8 Q3
9 9 T9 Q4
10 10 T10 Q5
而真实结果确实:
rownum tid tname ttype
5 1 T1 Q6
4 2 T2 Q2
3 3 T3 Q7
2 4 T4 Q1
1 5 T1 Q1
6 6 T6 Q1
7 7 T7 Q3
8 8 T8 Q3
9 9 T9 Q4
10 10 T10 Q5
产生的结果并没有按我们预期的先排序再生成rownum值,生成的rownum值是按照我们添加数据时的顺序,
产生这种结果可以有两种方式解决:
1、order by 字段建立主键约束
2、将rownum提到外层使用,语句:
SELECT ROWNUM,tt.* FROM (
SELECT * FROM t_test t
)tt
采用这两种方式之一,输出的结果就同我们预想的一样。
但是,在使用的过程中发现了另外一个问题,在对分组字句使用rownum时显示乱序。
sql语句:
SELECT * FROM (
SELECT MAX(t.tid),MAX(t.tname),t.ttype FROM t_test t GROUP BY t.ttype
) tt WHERE ROWNUM<3
执行结果并没有如预期显示子查询结果的前两行数据。
解决方法有两个:
1、分组内部先排序
SELECT * FROM (
SELECT MAX(t.tid),MAX(t.tname),t.ttype FROM t_test t GROUP BY t.ttype ORDER BY MAX(t.tid)
) tt WHERE ROWNUM<3
2、分组外多包层查询
SELECT ttt.* FROM (
SELECT ROWNUM row_num,tt.* FROM (
SELECT MAX(t.tid),MAX(t.tname),t.ttype FROM t_test t GROUP BY t.ttype
) tt
) ttt WHERE ROWNUM<3
篇4:DataGrid分页使用小结
默认分页模式:
选中“允许分页”;页大小;页导航设置,可以是上下方式,也可以用页码方式
格式里可以设置“页导航”按钮的对起方式;
private void datashow//绑定数据
{
string sql=“server=127.0.0.1;database=ltp;user id=sa;password=”;
SqlConnection mycon=new SqlConnection(sql);
string selsql=“select * from data”;
SqlDataAdapter da=new SqlDataAdapter(selsql,mycon);
DataSet ds=new DataSet();
da.Fill(ds,“data”);
this.DataGrid1.DataSource=ds.Tables[“data”];
this.DataGrid1.DataBind();
}
响应事件 PageIndexChanged()
this.DataGrid1.CurrentPageIndex=e.NewPageIndex;
datashow();
自定义导航控件的默认分页模式
当前页:this.Label1.Text=(this.DataGrid1.CurrentPageIndex+1).ToString();
因为CurrentPageIndex从0开始的,所以要+1
总页数:this.Label2.Text=this.DataGrid1.PageCount.ToString();
//第一页
this.DataGrid1.CurrentPageIndex=0;
//上一页
if(this.DataGrid1.CurrentPageIndex>0)
{
this.DataGrid1.CurrentPageIndex-=1;
this.datashow();
}
//下一页
if(this.DataGrid1.CurrentPageIndex<(this.DataGrid1.PageCount-1))
{
this.DataGrid1.CurrentPageIndex+=1;
this.datashow();
}
//最后一页
this.DataGrid1.CurrentPageIndex=this.DataGrid1.PageCount-1
最后再 datashow();
自定义数据分页--非常重要!(提高性能效率)
每次this.datashow();是提取全部数据,反而降低了效率,
正确的方法:
1,选中“允许分页”;“允许自定义分页”;页大小。
2,添加导航按钮,设置CommandName属性,previous,next
3,代码:
//记录每一页的开始索引
int startindex;
private void Page_Load(object sender, System.EventArgs e)
{
//自定义按钮事件
this.btnprevious.Click+=new System.EventHandler(this.NavigateToPage);
this.btnnext.Click+=new System.EventHandler(this.NavigateToPage);
//or nCommand=“NavigateToPage”
if(!IsPostBack)
{
startindex=0;
//得到数据源的记录数,并指派给DataGrid1
string constr=“server=127.0.0.1;database=ltp;user id=sa;password=”;
SqlConnection mycon=new SqlConnection(constr);
mycon.Open();
string sql=“select 总数=count(*) from data”;
SqlCommand com=new SqlCommand(sql,mycon);
SqlDataReader dr=com.ExecuteReader(CommandBehavior.SingleRow);
if(dr.Read())
this.DataGrid1.VirtualItemCount=(int)dr[“总数”];
dr.Close();
mycon.Close();
//
this.bindGrid(startindex,“previous”);
}
}
//自定义按钮事件
private void NavigateToPage(object sender,System.EventArgs e)
{
string pageinfo=((Button)sender).CommandName;
switch(pageinfo)
{
case “previous”:
if(this.DataGrid1.CurrentPageIndex>0)
{
this.DataGrid1.CurrentPageIndex-=1;
}
break;
case “next”:
if(this.DataGrid1.CurrentPageIndex<(this.DataGrid1.PageCount-1))
{
this.DataGrid1.CurrentPageIndex+=1;
}
break;
}
//得到开始的索引
startindex=this.DataGrid1.CurrentPageIndex*this.DataGrid1.PageSize;
//重新绑定
this.bindGrid(startindex,pageinfo);
}
//从数据源提取所需的数据记录--方法2(有int序号的表)
private void bindGrid2(int startindex,string pageinfo)
{
string constr=“server=127.0.0.1;database=ltp;user id=sa;password=”;
SqlConnection mycon=new SqlConnection(constr);
mycon.Open();
string sql=“select top 5 * from data where 序号>=”+startindex+“ order by 序号”;
SqlDataAdapter da=new SqlDataAdapter(sql,mycon);
DataSet ds=new DataSet();
da.Fill(ds,“data”);
this.DataGrid1.DataSource=ds.Tables[“data”];
this.DataGrid1.DataBind();
mycon.Close();
}
//从数据源提取所需的数据记录--方法1(按某字符串列排序的)
private void bindGrid(int startindex,string pageinfo)
{
string constr=“server=127.0.0.1;database=ltp;user id=sa;password=”;
SqlConnection mycon=new SqlConnection(constr);
mycon.Open();
SqlCommand com=new SqlCommand();
switch(pageinfo)
{
case “previous”:
string sql=“select top 5 * from data where 持股名称>=@id order by 持股名称”;
com=new SqlCommand(sql,mycon);
// com=new SqlCommand(“select top 5 * from data where 持股名称>=@id order by 持股名称”,mycon);
if(startindex==0)
{
com.Parameters.Add(“@id”,SqlDbType.NVarChar,10).Value=“”;
}
else
{
//把开始
com.Parameters.Add(“@id”,SqlDbType.NVarChar,10).Value=ViewState[(this.DataGrid1.CurrentPageIndex+1).ToString()];
// com.Parameters.Add(“@id”,SqlDbType.NVarChar,10).Value=this.DataGrid1.Items[0].Cells开始
com.Parameters.Add(“@id”,SqlDbType.NVarChar,10).Value=this.DataGrid1.Items[4].Cells[1].Text;
break;
}
SqlDataReader dr=com.ExecuteReader();
this.DataGrid1.DataSource=dr;
this.DataGrid1.DataBind();
dr.Close();
mycon.Close();
//重新得到当前开始第一行的列值
ViewState[(this.DataGrid1.CurrentPageIndex+1).ToString()]=this.DataGrid1.Items[0].Cells[1].Text;
}
篇5:word文档中分页符怎么使用
打开Word文档,将光标移动到目标位置。
打开“页面布局”选项卡。
在“页面设置”中单击“分隔符”按钮。
在“分隔符”列表中选择“分页符”选项。
篇6:word文档中分页符怎么使用
打开Word2010文档窗口,将光标移动到目标位置。
单击“插入”选项卡。
在“页”中单击“分页”按钮即可在光标位置插入分页符标记。
篇7:Sql Server和Oracle的sql语句分页
在sql以上的版本中可以用如下代码:
[sql]
--@PageNo 是页码(要查询第几页),@pageSize是页容量(即每页显示多少条数据)
[sql]
select * from (
select row_number over(order by id) rn,* from Test)
tb where rn >(@PageNo-1)*@pageSize and rn <=@PageNo*@pageSize
以上只是简单的分页,如果还有其他逻辑,比如排序 可以在over中加入排序的方法 test表 也可以换成子查询等其他逻辑
在oracle中,可以使用如下语句
[sql]
select t2.*
from (select rownum r,t1.* from test t1 where rownum<=:PageNo*:pageSize) t2
where t2.r>(:PageNo-1)*:pageSize
参数由@变成了‘:’意义都是相同的! 只需在查询时传入需要的参数即可.
篇8:使用 PHP 读取(TXT)文件 并分页显示
[PHP]代码
view source
print?01
02session_start();
03if (empty($page)) {$page=1;}
04if (isset($_GET['page'])==TRUE) {$page=$_GET['page']; }
05?>
06
07
08
09www.qqview.com-Read Result
10
16
17
18
19
20
21
22if($page){
23$counter=file_get_contents(“example.txt”); //-------read the file into a string.-------
24$length=strlen($counter);
25$page_count=ceil($length/5000);
26
27function msubstr($str,$start,$len){
28$strlength=$start+$len;
29$tmpstr=“”;
30for($i=0;$i<$strlength;$i++) {
31if(ord(substr($str,$i,1))==0x0a) {
32$tmpstr.='
';
33}
34if(ord(substr($str,$i,1))>0xa0) {
35$tmpstr.=substr($str,$i,2);
36$i++;
37}
38else{
39$tmpstr.=substr($str,$i,1); }
40}
41return $tmpstr;
42}
43//--------------------------截取中文字符串--------------------------
篇9:如何对WORD跨页表格使用分页符
朋友托我为他的WORD文档设置页眉页脚,这篇WORD文档不是普通的正文,而是文字与表格混排的文档,我觉得没有什么大问题,就帮他做。
可是在表格的地方遇到了麻烦事,按他的要求,表格的第一页是没有页眉页脚的,而他文章里的所有表格都是跨页的,最少的也是跨了两页,
在使用WORD分页符时怎么也分不了。而文字部分则没的这种问题。后来最终弄清了如何在表格中使用分页符。
当WORD中一个表格需要跨页的时候,将表格拆分成两栏,在表格中的文字部分单击鼠标右键,选择拆分单元格,选择一列两栏,确定后会在已有的表格下面生成新的一栏,然后在下面那栏的第一个回车处使用分页符,使之与上面的表格分离并自动分到下一页去,然后再向表格中粘贴文字。再分页以便设置页眉页脚。
篇10:HibernateHQL语句使用总结
1. 查询整个映射对象所有字段
//直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段 String hql = “from Users”; Query query = session.createQuery(hql); List2.查询字段
//查询其中几个字段 String hql = “ select name,passwd from Users”; Query query = session.createQuery(hql); //默认查询出来的list里存放的是一个Object数组 List【Oracle SQl语句使用rownum分页】相关文章:
3.语句
6.使用背水一战造句
7.场所使用证明
8.使用根深叶茂造句
9.土地使用协议书
10.微波炉使用注意事项






文档为doc格式