久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

SQLServer和Oracle中怎么實現分頁查詢

139次閱讀
沒有評論

共計 2201 個字符,預計需要花費 6 分鐘才能閱讀完成。

本篇文章為大家展示了 SQLServer 和 Oracle 中怎么實現分頁查詢,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

1. 分頁算法  

最開始我在網上查找資料的時候,看到很多分頁內容,感覺很多很亂。其實不是這樣。網上那些資料大同小異。問題出在了我自己這里。我沒搞明白進行分頁的前提是什么?我們都知道只要有分頁都會涉及這些變量:每頁又多少條記錄(pageSize)、當前頁(pageNow)、總記錄數(totalRecords)、總頁數(totalPages)、開始頁(beginRow)、結束頁(endRow)。網上的那些資料分頁算法有用到 pageSize 的,有用到 beginPage 還有用到 endPage. 其實這些變量需要分類:我將他們分為三類:A. 需要從數據庫中查詢出來的:totalRecords. select count(*) from tableName B. 最基本的需要用戶提供的:pageSize 和 pageNow.(個人覺得這是分頁算法的前提) C. 從其他變量計算得來的:totalPages、beginRow 和 endRow.(這里需要計算出 beginRow 和 endRow 是由于分頁查詢中需要用到,totalPages 是頁面需要提供的信息)。具體的計算公式:

totalPages: if ((totalRecords% pageSize) == 0) { totalPages = totalRecords/ pageSize; } else { totalPages = totalRecords/ pageSize + 1; } beginRow: (pageNow-1) * PageSize +1 endRow: pageNow * PageSize

這樣這些變量的值就都可以獲得了。具體怎么使用請接著看 2 和 3 部分。

2.Oracle 中的常用分頁方法  

其實不管是 Oracle 還是 SQLServer,實現分頁查詢的基礎都是子查詢。用我自己的話說就是:select 中套 select。Oracle 分頁方式有三種。我這里只講一種容易理解的。以員工表(emp)為例。假設有 10 條記錄,現在分頁要求每頁 5 條記錄,當前頁為 2. 則查詢出來的是記錄為 6 -10。我們先用具體的數字做,然后再換成變量。 

Oracle 實現第一步:

select a.*,rownum rn from (select * from emp) a;其中 rownum 是 Oracle 內部分配行號。括號中的 select * from emp 是將 emp 表中的記錄全部查詢出來。然后我們再將查詢出來的結果作為視圖進一步查詢。外面的 select 除了查詢 emp 的全部以外再加一個 rownum,以便后面的查詢使用。 

Oracle 實現第二步:

select a.*,rownum rn from (select * from emp) a where rownum =10;第二步加條件查詢出行號小于等于 10 的記錄。這里可能會有這樣的疑問為什么不直接寫 rownum =6 and rownum =10. 不就解決問題了。這里 Oracle 內部機制不支持這種寫法。 

Oracle 實現第三步:

select * from (select a.*,rownum rn from (select * from emp) a where rownum =10) where rn =6;ok, 這樣就可以完成查詢 6 -10 條記錄了。最后。我們轉換為變量。可能是在 java 程序中也可能是在 pl/sql 中。 

需要轉換的又三個:

“emp”的位置為具體表名、“6”的位置 為 (pageNow-1) * PageSize +1、“10 的位置 為 pageNow * PageSize。這種方式可以作為模板使用,修改起來很方便。所有改動只需要改動最里層就可以了。比如查詢指定列的情況:修改最里層 select ename,sal from emp;根據薪水列排序:select ename,sal from emp order by sal;都只需要修改最里層。

3.SQLServer 中的常用分頁方法  

我們還是采用員工表的例子講 SQLServer 中分頁的實現  

第一種 TOP 的使用:

SQLServer 實現第一步:select top 10 * from emp order by empid ; 按照員工 ID 升序排列,取出前 10 條記錄。SQLServer 實現第二步:select top 5* from (select top 10 * from emp order by empid) a order by empid desc。將取出的 10 條記錄按員工號降序排列再取出 5 條記錄。這里的第一次用升序排序,第二次用降序排序是巧妙之處。沒有想到 top 能起到這樣的效果。這里的 10 的位置用變量 pageNow * PageSize 代替而 5 用 PageSize 代替。 

第二種 Top 和 In 的使用:

select top 5 * from emp where empid in (select top 10 empid from emp order by empid) order by empid desc; 這里的 10 的位置用變量 pageNow * PageSize 代替而 5 用 PageSize 代替。其他查詢都是大同小異的,這里不再贅述。

上述內容就是 SQLServer 和 Oracle 中怎么實現分頁查詢,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-03發表,共計2201字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 永登县| 临高县| 宽甸| 福安市| 运城市| 漳州市| 罗田县| 华宁县| 海淀区| 平安县| 花莲县| 双桥区| 淳化县| 瑞丽市| 治县。| 高邑县| 中卫市| 天水市| 丹寨县| 赫章县| 贵溪市| 莫力| 宣汉县| 绍兴市| 江孜县| 巴彦县| 永寿县| 密云县| 鲁山县| 绥化市| 兖州市| 额尔古纳市| 乡城县| 禄劝| 张家港市| 淅川县| 北海市| 丰台区| 甘泉县| 綦江县| 新津县|