站長資訊網
最全最豐富的資訊網站

oracle分頁查詢原理是什么

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

oracle分頁查詢原理是什么

本教程操作環境:Windows10系統、Oracle 11g版、Dell G3電腦。

oracle分頁查詢原理是什么

分頁的原理:

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

2. 查詢前N條數據

3.從第2步的查詢結果中取M到N條數據

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

例子: 查詢表中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數據庫分頁查詢的一個重要障礙就是這個。

–至于原理因為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.*,不然沒有完整數據。

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

–下面是用分析函數的方法;

–方法三

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

–可是我們實際查詢看一下結果,發現完全不一樣。

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

–有沒有誰能解釋一下。

–下面來一個沒有意義的

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

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

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

–起別名必須查詢出數據表才行,

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

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

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)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久99国产综合精品女同| 亚洲欧洲美洲无码精品VA| 日韩一区二区三区射精| 亚洲色在线无码国产精品不卡| 无码国内精品人妻少妇 | 精品久久国产一区二区三区香蕉 | 亚洲国产精品一区二区第一页 | 久热香蕉精品视频在线播放| 国内精品久久久久久中文字幕| 亚洲国产精品视频| 日韩三级一区二区| 日韩美女中文字幕| 日韩国产精品无码一区二区三区| 国产精品中文字幕在线| 精品久久久久久无码中文字幕漫画 | 亚洲精品国产电影| 日韩AV无码精品一二三区| 亚洲欧洲日韩国产| 日韩电影免费观看| 国产日韩一区二区三区在线观看 | 久久久久久九九精品久小说| 国产精品一区二区久久国产| 国产亚洲精品影视在线产品| 久久无码人妻精品一区二区三区| 久久久精品视频免费观看| 久久久精品波多野结衣| 中文字幕一区精品| 国产A三级久久精品| 国内精品久久久人妻中文字幕 | 久久99热久久99精品| 久久精品国产亚洲AV未满十八| 色欲AV永久无码精品无码| 日韩精品一卡2卡3卡4卡新区乱码| 亚洲最大天堂无码精品区| 久久中文字幕精品| 久热爱精品视频在线| 精品欧洲男同同志videos| 国产精品电影网在线好看| 国产精品国产三级国产在线观看| 国产精品林美惠子在线观看| 国产精品一区二区香蕉|