搜尋
首頁資料庫Oracleoracle分頁查詢原理是什麼

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.將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影片教學

以上是oracle分頁查詢原理是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
oracle怎么查询所有索引oracle怎么查询所有索引May 13, 2022 pm 05:23 PM

方法:1、利用“select*from user_indexes where table_name=表名”语句查询表中索引;2、利用“select*from all_indexes where table_name=表名”语句查询所有索引。

什么是oracle asm什么是oracle asmApr 18, 2022 pm 04:16 PM

oracle asm指的是“自动存储管理”,是一种卷管理器,可自动管理磁盘组并提供有效的数据冗余功能;它是做为单独的Oracle实例实施和部署。asm的优势:1、配置简单、可最大化推动数据库合并的存储资源利用;2、支持BIGFILE文件等。

oracle全角怎么转半角oracle全角怎么转半角May 13, 2022 pm 03:21 PM

在oracle中,可以利用“TO_SINGLE_BYTE(String)”将全角转换为半角;“TO_SINGLE_BYTE”函数可以将参数中所有多字节字符都替换为等价的单字节字符,只有当数据库字符集同时包含多字节和单字节字符的时候有效。

Oracle怎么查询端口号Oracle怎么查询端口号May 13, 2022 am 10:10 AM

在Oracle中,可利用lsnrctl命令查询端口号,该命令是Oracle的监听命令;在启动、关闭或重启oracle监听器之前可使用该命令检查oracle监听器的状态,语法为“lsnrctl status”,结果PORT后的内容就是端口号。

oracle怎么删除sequenceoracle怎么删除sequenceMay 13, 2022 pm 03:35 PM

在oracle中,可以利用“drop sequence sequence名”来删除sequence;sequence是自动增加数字序列的意思,也就是序列号,序列号自动增加不能重置,因此需要利用drop sequence语句来删除序列。

oracle怎么查询数据类型oracle怎么查询数据类型May 13, 2022 pm 04:19 PM

在oracle中,可以利用“select ... From all_tab_columns where table_name=upper('表名') AND owner=upper('数据库登录用户名');”语句查询数据库表的数据类型。

oracle查询怎么不区分大小写oracle查询怎么不区分大小写May 10, 2022 pm 05:45 PM

方法:1、利用“LOWER(字段值)”将字段转为小写,或者利用“UPPER(字段值)”将字段转为大写;2、利用“REGEXP_LIKE(字符串,正则表达式,'i')”,当参数设置为“i”时,说明进行匹配不区分大小写。

Oracle怎么修改sessionOracle怎么修改sessionMay 13, 2022 pm 05:06 PM

方法:1、利用“alter system set sessions=修改后的数值 scope=spfile”语句修改session参数;2、修改参数之后利用“shutdown immediate – startup”语句重启服务器即可生效。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境