oracle的分頁查詢原理:1、利用ORACLE的rownum欄位的特性查詢;2、查詢指定數量N條資料;3、從指定數量N條查詢結果中,取出M條資料;4、在web開發中將M、N當作參數傳遞,就可以得到分頁的結果。
本教學操作環境: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中文網其他相關文章!

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

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

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

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

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

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

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

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

記事本++7.3.1
好用且免費的程式碼編輯器

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

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

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境