×

oracle分页关键字 oracle 分页

oracle怎么实现分页?oracle 分页查询 为什么第一次子查询用rownum,第二次用rn,其他方式都不可以呢

admin admin 发表于2022-07-17 23:02:51 浏览93 评论0

抢沙发发表评论

因为1234不符合字段命名规则select * from (select t1.*, rownum as “1234“ from t1) where 1234 》 10 and 1234 《= 20; 查询为空,就可以使用这个值了所以我们可以先成立一个临时结果:select t1.*, rownum as “rn“ from t1然后从这个结果尽心查询:select * from (select t1.*, rownum as “rn“ from t1) where “rn“ 》 10 and “rn“ 《= 20但是一般都会把小于等于放在第一个结果中,select * from (select rownum tid,components.* from components where rownum《=100) where tid《=10;oracle 分页查询 为什么第一次子查询用rownum,查询语句中的rn会翻译成RN,而1234《= 20是一个恒false的条件select * from (select t1.*, rownum as “1234“ from t1) where “1234“ 》 10 and “1234“ 《= 20; 查询结果正常jsp 如何将查询结果实现分页,能起到增加效率的效果select * from (select t1.*, rownum as “rn“ from t1 where rownum 《= 20) where “rn“ 》 10注:你提到的rn,查询结果是全部结果但是如果写rownum 》 1 结果就是空的,语句当然可以写成:select * from (select t1.*, rownum as aaa1234 from t1) where aaa1234 》 10 and aaa1234 《= 20; 别名的命名规则基本上是毫无顾忌的。

oracle怎么实现分页

由于Oracle数据库没有顶级关键字,因此不能像Microsoft的数据一样操作。这里有两种方法:

  1. 一种是利用相反的。
    PAGESIZE:每页显示的记录数
    CURRENTPAGE:当前页号
    数据表的名字是:components
    索引主键字是:id
    select * from components where id not in(select id from components where rownum《=(PAGESIZE*(CURRENTPAGE-1))) and rownum《=PAGESIZE order by id;
    如下例:
    select * from components where id not in(select id from components where rownum《=100) and rownum《=10 order by id;
    从101到记录开始选择,选择前面10条。

  2. 使用minus,即中文的意思就是减去,呵呵,这语句非常的有意思,也非常好记
    select * from components where rownum《=(PAGESIZE*(CURRENTPAGE-1)) minus select * from components where rownum《=(PAGESIZE*(CURRENTPAGE-2));
    如例:select * from components where rownum《=10 minus select * from-分页

  3. 一种是利用Oracle的rownum,这个是Oracle查询自动返回的序号,一般不显示,但是可以通过select rownum from ,可以看到,是从1到当前的记录总数。
    select * from (select rownum tid,components.* from components where rownum《=100) where tid《=10;-oracle

oracle 分页查询 为什么第一次子查询用rownum,第二次用rn,其他方式都不可以呢


rownum 是一个虚列,不属于表,只是用来给结果序号
要考虑结果逻辑。
比如我可以写rownum》0或者rownum 》= 1,查询结果是全部结果
但是如果写rownum 》 1 结果就是空的。
解答:因为第一个结果rownum应该为1,不符合,所以排除
第二条,因为第一条被排除了,这一条应被安排在结果的第一个,rownum也应该排为1,所以不符合,排除
依次类推,全部都不符合,所以结果为空
而如果我将rownum作为一个临时结果,再从这个临时结果进行查询,就可以使用这个值了
所以我们可以先成立一个临时结果:select t1.*, rownum as “rn“ from t1
然后从这个结果尽心查询:select * from (select t1.*, rownum as “rn“ from t1) where “rn“ 》 10 and “rn“ 《= 20
但是一般都会把小于等于放在第一个结果中,因为第一个结果是临时的,会占用内存,而且还不确定这个表的数据量具体有多大,所以,尽量减少临时结果的大小,能起到增加效率的效果
select * from (select t1.*, rownum as “rn“ from t1 where rownum 《= 20) where “rn“ 》 10
注:你提到的rn,并不是一个固定值,而是临时存放rownum的临时结果的列,起了一个名字叫rn, 在字段的后面,用表示,语句当然可以写成:select * from (select t1.*, rownum as aaa1234 from t1) where aaa1234 》 10 and aaa1234 《= 20;
别名的命名规则基本上是毫无顾忌的。只是如果不符合命名规则,比如数字开头,拥有空格,运算符号,关键字 等情况的列名,需要用双引号引起来,但是要注意,双引号的列名,使用时也最好(非必须)用双引号,因为系统执行sql语句时,会将没有引号的字母全部翻译成大写,再执行,如果使用as “rn“ ,然后使用rn查询时,查询语句中的rn会翻译成RN,与字段名的rn对应不上,报:找不到该字段的错误。(当然,如果定义为 “RN“,查询语句中用rn 可以对应上,中文,大写,符号,都无大小写之分)
比如:
select * from (select t1.*, rownum as 1234 from t1) where 1234 》 10 and 1234 《= 20; 会报错,因为1234不符合字段命名规则
select * from (select t1.*, rownum as “1234“ from t1) where 1234 》 10 and 1234 《= 20; 查询为空,因为后一个1234会被认为是数字,而1234《= 20是一个恒false的条件
select * from (select t1.*, rownum as “1234“ from t1) where “1234“ 》 10 and “1234“ 《= 20; 查询结果正常
-分页

jsp 如何将查询结果实现分页,最好简单易懂…


jsp中分页最快捷的办法是用分页组件:
分页组件代码使用taglib实现的:
《%@ tag language=“java“ pageEncoding=“UTF-8“%》
《%@ taglib uri=“/WEB-INF/tld/c.tld“ prefix=“c“%》
《%@ attribute name=“curIndex“ type=“java.lang.Long“ required=“true“%》
《%@ attribute name=“pageSize“ type=“java.lang.Long“ required=“true“%》
《%@ attribute name=“pagerRange“ type=“java.lang.Long“ required=“true“%》
《%@ attribute name=“totalPage“ type=“java.lang.Long“ required=“true“%》
《%@ attribute name=“formId“ type=“java.lang.String“ required=“true“%》
《%
long begin = Math.max(1, curIndex - pagerRange/2);
long end = Math.min(begin + (pagerRange-1),totalPage);

request.setAttribute(“p_begin“, begin);
request.setAttribute(“p_end“, end);
%》
《table class=“pager“》
《tr》
《% if (curIndex!=1){%》
《td》《a href=“javascript:gotoPage(1)“》首页《/a》《/td》
《td》《a href=“javascript:gotoPage(《%=curIndex-1%》)“》上一页《/a》《/td》
《%}else{%》
《td class=“disabled“》《a href=“#“》首页《/a》《/td》
《td class=“disabled“》《a href=“#“》上一页《/a》《/td》
《%}%》

《c:forEach var=“i“ begin=“${p_begin}“ end=“${p_end}“》
《c:choose》
《c:when test=“${i == curIndex}“》
《td class=“active“》《a href=“#“》${i}《/a》《/td》
《/c:when》
《c:otherwise》
《td》《a href=“javascript:gotoPage(${i})“》${i}《/a》《/td》
《/c:otherwise》
《/c:choose》
《/c:forEach》

《% if (curIndex!=totalPage){%》
《td》《a href=“#“》下一页《/a》《/td》
《td》《a href=“#“》末页《/a》《/td》
《%}else{%》
《td class=“disabled“》《a href=“javascript:gotoPage(《%=curIndex+1%》)“》下一页《/a》《/td》
《td class=“disabled“》《a href=“javascript:gotoPage(《%=totalPage%》)“》末页《/a》《/td》
《%}%》
《td》《a》共${totalPage}页《/a》《/td》
《td class=“input_li“》跳转到:《input type=“text“ id=“p_pageIndex“ size=“2“ value=“《c:out value=“${pageIndex}“/》“/》页 《input type=“button“ id=“gotoBtn“ onclick=“gotoPageByBtn()“ value=“GO“/》《/td》
《td class=“input_li“》 每页:
《select id=“p_pageSizeSelect“ onchange=“gotoPage(《%=curIndex%》)“》
《option value=“10“ 《c:if test=“${pageSize==10}“》selected《/c:if》》10条《/option》
《option value=“20“ 《c:if test=“${pageSize==20}“》selected《/c:if》》20条《/option》
《option value=“50“ 《c:if test=“${pageSize==50}“》selected《/c:if》》50条《/option》
《/select》
《/td》
《/tr》
《/table》
jsp中使用方法:
《%@ taglib uri=“/WEB-INF/tld/c.tld“ prefix=“c“%》
《%@ taglib uri=“/WEB-INF/tld/fmt.tld“ prefix=“fmt“%》
《%@ taglib tagdir=“/WEB-INF/tags“ prefix=“tags“%》
《head》
《style》《!--分页样式--》
.pager { font: 12px Arial, Helvetica, sans-serif;}
.pager a {padding: 1px 6px; border: solid 1px #ddd; background: #fff; text-decoration: none;margin-right:2px;line-height:30px;vertical-align:middle;}
.pager .active a{color:red;border:none;}
.pager a:visited {padding: 1px 6px; border: solid 1px #ddd; background: #fff; text-decoration: none;}
.pager a:hover {color: #fff; background: #ffa501;border-color:#ffa501;text-decoration: none;}
.pager .input_li{padding: 1px 6px;}
《/style》
《script》《!--分页跳转脚本--》
function gotoPage(pageIndex){
var queryForm = document.getElementById(“queryForm“);
var action = queryForm.action;
var pageSize = document.getElementById(“p_pageSizeSelect“).value;
action += “?pageIndex=“ + pageIndex + “&pageSize=“ + pageSize;
//alert(action);
queryForm.action = action;
queryForm.submit();
}
function gotoPageByBtn(){
var pageIndex = document.getElementById(“p_pageIndex“).value;
var pageIndexInt = parseInt(pageIndex);
var totalPage = ${totalPage};

if(pageIndexInt》0 && pageIndexInt《totalPage){
gotoPage(pageIndex);
}
else{
alert(“输入页数超出范围!“);
}
}
《/script》
《/head》
《body》
《form id=“queryForm“ action=“${basePath}/log/list“ method=“post“》
《table》
《tr》
《td》用户名:《/td》
《td》《input type=“text“ name=“userName“ value=“《c:out value=“${userName}“/》“/》 《/td》
《td》《input type=“submit“ text=“查询“/》《/td》
《/tr》
《/table》
《/form》
《tags:pager pagerRange=“10“ pageSize=“${pageSize}“ totalPage=“${totalPage}“ curIndex=“${pageIndex}“ formId=“queryForm“》《/tags:pager》
《table class=“border“》
《thead》
《tr》
《th width=“100“》用户名称《/th》
《th width=“500“》操作内容《/th》
《th width=“200“》操作时间《/th》
《/tr》
《/thead》
《tbody》
《c:forEach items=“${logList}“ var=“log“》
《tr》
《td》${log.userName}《/td》
《td》${log.result}《/td》
《td》
《fmt:formatDate value=“${log.createTime}“ pattern=“yyyy-MM-dd HH:mm:ss“/》
《/td》
《/tr》
《/c:forEach》
《/tbody》
《/table》
《tags:pager pagerRange=“10“ pageSize=“${pageSize}“ totalPage=“${totalPage}“ curIndex=“${pageIndex}“ formId=“queryForm“》《/tags:pager》
《/body》
-oracle