欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          oracle分頁查詢原理是什么

          oracle的分頁查詢原理:1、利用ORACLE的rownum字段的特性查詢;2、查詢指定數(shù)量N條數(shù)據(jù);3、從指定數(shù)量N條查詢結果中,取出M條數(shù)據(jù);4、在web開發(fā)中將M、N作為參數(shù)進行傳遞,就可以得到分頁的結果。

          oracle分頁查詢原理是什么

          本教程操作環(huán)境:Windows10系統(tǒng)、Oracle 11g版、Dell G3電腦。

          oracle分頁查詢原理是什么

          分頁的原理:

          1.借助ORACLE的rownum這個字段的特性查詢。

          2. 查詢前N條數(shù)據(jù)

          3.從第2步的查詢結果中取M到N條數(shù)據(jù)

          4.在web開發(fā)中將M,N作為參數(shù)進行傳遞,就可以得到分頁的結果。

          例子: 查詢表中20~30條記錄,sql語句如下。

          select *   from(   select   rownum  as  pageNo,  A.*   from    tableName     A   where   rownum   <=   30)  B  where B.pageNo >=20;

          示例:

          –如何獲取雇員表中薪水最高的前5人?

          SELECT * FROM( SELECT * FROM emp ORDER BY sal DESC) WHERE Rownum<6

          –如何獲取雇員表中薪水排名第5的雇員信息

          SELECT * FROM( SELECT * FROM emp ORDER BY sal DESC) WHERE Rownum=5

          –結果查詢不出內容

          –同樣ROWNUM>=5查詢5名之后的成績也失敗

          –這里就涉及到ROWNUM只能小于不能大于等于。所以–oracle數(shù)據(jù)庫分頁查詢的一個重要障礙就是這個。

          –至于原理因為ROWNUM是一個每一次都要從1開始排列的偽列。于是ROWNUM>=n。比如1大于任何n(第幾條)都不成立。倒是可以ROWNUM=1.可以查到。因為1>=1成立。N=2,1>=2就不成立了。所以大于等于只能查第一條。加上小于等于。只能查這些了。所以這個困難算是增加了分頁查詢的難度與障礙。

          –方法一 最簡單的查詢

          –第五條到第十條。

          –只有一層嵌套,一個子查詢,

          SELECT * FROM (SELECT ROWNUM rn ,e.* FROM emp e WHERE ROWNUM<=10) WHERE rn>=5;

          –這樣其實就是下面的方法轉化而來。

          –也就是子查詢得到的新表再次被查詢。

          –關鍵的一步就是ROWNUM rn。

          –而且不要忘了e.*,不然沒有完整數(shù)據(jù)。

          SELECT * FROM (SELECT ROWNUM rn, e.*           FROM emp e          WHERE ROWNUM <= 10) table_1  WHERE table_1.rn>= 5;

          –上面的沒有排序,下面進行排序

          –因為要先排序,才能查詢,所以表越大,效率越慢。

          –方法二

          SELECT * FROM (SELECT ROWNUM rm ,e.* FROM emp e order by sal DESC ) WHERE rm>=5 AND rm<=10

          –下面是用分析函數(shù)的方法;

          –方法三

          SELECT *  FROM (SELECT emp.*,    ROW_NUMBER () OVER (ORDER BY sal DESC) rank      FROM emp)    WHERE rank >=6 AND rank<=10;

          –可是我們實際查詢看一下結果,發(fā)現(xiàn)完全不一樣。

          –人工查看了一下。分析函數(shù)的方法結果是正確的。不理解。

          –有沒有誰能解釋一下。

          –下面來一個沒有意義的

          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

          –方法四(海量數(shù)據(jù)查詢,如百度,天貓查詢)

          SELECT * FROM( SELECT e.* ,ROWNUM rn FROM ( SELECT * FROM emp ORDER BY sal DESC ) e WHERE  ROWNUM<=10 )WHERE rn>=6;

          –分解步驟

          –第一步:

          SELECT * FROM emp ORDER BY sal DESC

          –第二步:

          SELECT e .*,ROWNUM rn FROM (SELECT * FROM emp ORDER BY sal DESC) e

          –第三步:

          SELECT e .*,ROWNUM rn FROM (SELECT * FROM emp ORDER BY sal DESC) e WHERE ROWNUM<=10

          –第四步:

          SELECT * FROM( SELECT e .*,ROWNUM rn FROM (SELECT * FROM emp ORDER BY sal DESC) e WHERE ROWNUM<=10) WHERE rn>=5

          –猜測錯誤。

          SELECT e .*,ROWNUM rn FROM (SELECT * FROM emp ORDER BY sal DESC) e WHERE rn<=10

          –起別名必須查詢出數(shù)據(jù)表才行,

          –而查詢條件用還不存在的條件去判斷,自然失敗。

          –方法五,閑的無聊的用法

          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

          推薦教程:《Oracle視頻教程》

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