久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      oracle分頁(yè)查詢?cè)硎鞘裁?/a>

      oracle的分頁(yè)查詢?cè)恚?、利用ORACLE的rownum字段的特性查詢;2、查詢指定數(shù)量N條數(shù)據(jù);3、從指定數(shù)量N條查詢結(jié)果中,取出M條數(shù)據(jù);4、在web開(kāi)發(fā)中將M、N作為參數(shù)進(jìn)行傳遞,就可以得到分頁(yè)的結(jié)果。

      oracle分頁(yè)查詢?cè)硎鞘裁?/></p>
<p>本教程操作環(huán)境:Windows10系統(tǒng)、Oracle 11g版、Dell G3電腦。</p>
<h2>oracle分頁(yè)查詢?cè)硎鞘裁?/h2>
<p>分頁(yè)的原理:</p>
<p>        1.借助ORACLE的rownum這個(gè)字段的特性查詢。</p>
<p>        2.  查詢前N條數(shù)據(jù)</p>
<p>        3.從第2步的查詢結(jié)果中取M到N條數(shù)據(jù)</p>
<p>       4.在web開(kāi)發(fā)中將M,N作為參數(shù)進(jìn)行傳遞,就可以得到分頁(yè)的結(jié)果。</p>
<p>例子:  查詢表中20~30條記錄,sql語(yǔ)句如下。</p>
<pre>select *   from(   select   rownum  as  pageNo,  A.*   from    tableName     A   where   rownum   <=   30)  B  where B.pageNo >=20;</pre>
<p>示例:</p>
<p>–如何獲取雇員表中薪水最高的前5人?</p>
<pre>SELECT * FROM( SELECT * FROM emp ORDER BY sal DESC) WHERE Rownum<6</pre>
<p>–如何獲取雇員表中薪水排名第5的雇員信息</p>
<pre>SELECT * FROM( SELECT * FROM emp ORDER BY sal DESC) WHERE Rownum=5</pre>
<p>–結(jié)果查詢不出內(nèi)容</p>
<p>–同樣ROWNUM>=5查詢5名之后的成績(jī)也失敗</p>
<p>–這里就涉及到ROWNUM只能小于不能大于等于。所以–oracle數(shù)據(jù)庫(kù)分頁(yè)查詢的一個(gè)重要障礙就是這個(gè)。</p>
<p>–至于原理因?yàn)镽OWNUM是一個(gè)每一次都要從1開(kāi)始排列的偽列。于是ROWNUM>=n。比如1大于任何n(第幾條)都不成立。倒是可以ROWNUM=1.可以查到。因?yàn)?>=1成立。N=2,1>=2就不成立了。所以大于等于只能查第一條。加上小于等于。只能查這些了。所以這個(gè)困難算是增加了分頁(yè)查詢的難度與障礙。</p>
<p>–方法一 最簡(jiǎn)單的查詢</p>
<p>–第五條到第十條。</p>
<p>–只有一層嵌套,一個(gè)子查詢,</p>
<pre>SELECT * FROM (SELECT ROWNUM rn ,e.* FROM emp e WHERE ROWNUM<=10) WHERE rn>=5;</pre>
<p>–這樣其實(shí)就是下面的方法轉(zhuǎn)化而來(lái)。</p>
<p>–也就是子查詢得到的新表再次被查詢。</p>
<p>–關(guān)鍵的一步就是ROWNUM rn。</p>
<p>–而且不要忘了e.*,不然沒(méi)有完整數(shù)據(jù)。</p>
<pre>SELECT * FROM (SELECT ROWNUM rn, e.*           FROM emp e          WHERE ROWNUM <= 10) table_1  WHERE table_1.rn>= 5;</pre>
<p>–上面的沒(méi)有排序,下面進(jìn)行排序</p>
<p>–因?yàn)橐扰判?,才能查詢,所以表越大,效率越慢?/p>
<p>–方法二</p>
<pre>SELECT * FROM (SELECT ROWNUM rm ,e.* FROM emp e order by sal DESC ) WHERE rm>=5 AND rm<=10</pre>
<p>–下面是用分析函數(shù)的方法;</p>
<p>–方法三</p>
<pre>SELECT *  FROM (SELECT emp.*,    ROW_NUMBER () OVER (ORDER BY sal DESC) rank      FROM emp)    WHERE rank >=6 AND rank<=10;</pre>
<p>–可是我們實(shí)際查詢看一下結(jié)果,發(fā)現(xiàn)完全不一樣。</p>
<p>–人工查看了一下。分析函數(shù)的方法結(jié)果是正確的。不理解。</p>
<p>–有沒(méi)有誰(shuí)能解釋一下。</p>
<p>–下面來(lái)一個(gè)沒(méi)有意義的</p>
<pre>SELECT * FROM  (SELECT e.*, ROWNUM AS rn from  ( SELECT * FROM emp ORDER BY sal DESC) e )ee  WHERE ee.rn>=5 AND ee.rn<=10</pre>
<p>–方法四(海量數(shù)據(jù)查詢,如百度,天貓查詢)</p>
<pre>SELECT * FROM( SELECT e.* ,ROWNUM rn FROM ( SELECT * FROM emp ORDER BY sal DESC ) e WHERE  ROWNUM<=10 )WHERE rn>=6;</pre>
<p>–分解步驟</p>
<p>–第一步:</p>
<pre>SELECT * FROM emp ORDER BY sal DESC</pre>
<p>–第二步:</p>
<pre>SELECT e .*,ROWNUM rn FROM (SELECT * FROM emp ORDER BY sal DESC) e</pre>
<p>–第三步:</p>
<pre>SELECT e .*,ROWNUM rn FROM (SELECT * FROM emp ORDER BY sal DESC) e WHERE ROWNUM<=10</pre>
<p>–第四步:</p>
<pre>SELECT * FROM( SELECT e .*,ROWNUM rn FROM (SELECT * FROM emp ORDER BY sal DESC) e WHERE ROWNUM<=10) WHERE rn>=5</pre>
<p>–猜測(cè)錯(cuò)誤。</p>
<pre>SELECT e .*,ROWNUM rn FROM (SELECT * FROM emp ORDER BY sal DESC) e WHERE rn<=10</pre>
<p>–起別名必須查詢出數(shù)據(jù)表才行,</p>
<p>–而查詢條件用還不存在的條件去判斷,自然失敗。</p>
<p>–方法五,閑的無(wú)聊的用法</p>
<pre>WITH ee AS (   SELECT e.*, ROWNUM rn FROM  ( SELECT * FROM emp ORDER BY sal DESC )e   )   SELECT ee.*   FROM ee   WHERE ee.rn>=5 AND ee.rn<=10</pre>
<p>推薦教程:《Oracle視頻教程》</p>
<p>
		</article>
								            <div   id= 贊(0)

      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)