亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

詳解SQLServer和Oracle的分頁查詢

2024-08-31 01:03:14
字體:
來源:轉載
供稿:網友

分頁功能是我們的基本功,必須要牢固掌握。通過對分頁算法的整理,希望對實現分頁功能更得心應手了,需要的朋友可以參考下

不管是DRP中的分頁查詢代碼的實現還是面試題中看到的關于分頁查詢的考察,都給我一個提示:分頁查詢是重要的。當數據量大的時候是必須考慮的。之前一直沒有花時間停下來好好總結這里。現在又將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是頁面需要提供的信息)。具體的計算公式:

 

 
  1. totalPages: if ((totalRecords% pageSize) == 0) {  
  2. totalPages = totalRecords/ pageSize;  
  3. else {  
  4. totalPages = totalRecords/ pageSize + 1;  
  5. }  
  6. beginRow: (pageNow-1) * PageSize +1  
  7. 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 代替。

其他查詢都是大同小異的,這里不再贅述。

以上就是兩種數據庫實現分頁功能的案例,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩最新中文字幕电影免费看| 亚洲变态欧美另类捆绑| 久久成人免费视频| 97久久久免费福利网址| 欧美另类高清videos| 最新中文字幕亚洲| 全亚洲最色的网站在线观看| 北条麻妃在线一区二区| 国产精品久久久久久久久久| 亚洲精品大尺度| 亚洲欧美日韩精品久久奇米色影视| 亚洲国产美女久久久久| 日韩高清有码在线| 久久成人人人人精品欧| 国产91精品久久久久| 国产精品精品国产| 国产精品劲爆视频| 欧美国产激情18| 国内精品免费午夜毛片| 亚洲国产精品va在线看黑人动漫| 欧美午夜精品久久久久久浪潮| 国产一区二区丝袜高跟鞋图片| 亚洲色图50p| 日韩在线视频一区| 日韩美女免费视频| 国产精品爽爽爽爽爽爽在线观看| 欧美成人激情视频免费观看| 欧美亚洲激情视频| 欧美激情一二区| 成人久久久久爱| 狠狠躁天天躁日日躁欧美| 欧美天天综合色影久久精品| 最近2019中文字幕mv免费看| 精品久久久久久中文字幕一区奶水| 亚洲人成伊人成综合网久久久| 91免费的视频在线播放| 97人人做人人爱| 日av在线播放中文不卡| 国产亚洲精品综合一区91| 午夜精品蜜臀一区二区三区免费| 日韩在线中文字幕| 91免费综合在线| 97香蕉久久超级碰碰高清版| 这里只有精品在线播放| 欧美日韩国产黄| 日韩av在线高清| 大荫蒂欧美视频另类xxxx| 91美女高潮出水| 国产黑人绿帽在线第一区| 国产精品青草久久久久福利99| 中文字幕亚洲激情| 欧美国产亚洲精品久久久8v| 久久精品夜夜夜夜夜久久| 这里只有精品在线播放| 国产高清视频一区三区| 成人网在线免费看| 国产精品欧美风情| 亚洲精品一区二区三区婷婷月| 国产一区视频在线| 久久精品国产电影| 国产视频精品xxxx| 97在线视频免费观看| 国产精品视频不卡| 97久久精品人搡人人玩| 欧美午夜美女看片| 亚洲精品99999| 中文字幕一区二区三区电影| 久久精品亚洲94久久精品| 亚洲欧美另类在线观看| 精品久久久久久亚洲国产300| 中文字幕日韩在线播放| 欧美另类在线观看| 亚洲国产欧美久久| 国产z一区二区三区| 国产婷婷97碰碰久久人人蜜臀| 韩国精品久久久999| 国产精品一区二区电影| 亚洲少妇中文在线| 欧美大片欧美激情性色a∨久久| 97人洗澡人人免费公开视频碰碰碰| 77777亚洲午夜久久多人| 成人黄在线观看| 精品成人国产在线观看男人呻吟| 久久久久久成人精品| 久热爱精品视频线路一| 欧美一区二区影院| 精品高清美女精品国产区| 国产亚洲在线播放| 国产91热爆ts人妖在线| 91精品啪aⅴ在线观看国产| 成人乱人伦精品视频在线观看| 国产精品免费视频xxxx| 亚洲第一区第一页| 国产精品永久免费观看| 亚洲综合日韩在线| 国产精品高潮呻吟久久av无限| 欧美电影第一页| 久久久久久久久久婷婷| 久久久精品国产亚洲| 久久久久久免费精品| 日韩欧美亚洲一二三区| 久久久久久久久久久久av| 91亚洲一区精品| 亚洲香蕉av在线一区二区三区| 日韩小视频网址| 欧美激情aaaa| 亚洲sss综合天堂久久| 国产成人精品免费久久久久| 欧美日韩999| 久久久久久中文| 国产精品视频在线播放| 亚洲精品一区中文| 日韩欧美精品中文字幕| 久久国产天堂福利天堂| 成人激情视频小说免费下载| 国产aaa精品| 538国产精品视频一区二区| 国产一区二区丝袜高跟鞋图片| 久久久亚洲精品视频| 97视频国产在线| 欧美日韩人人澡狠狠躁视频| 国产精品视频区| 国产精品成人av性教育| 一本色道久久综合狠狠躁篇怎么玩| 亚洲人午夜精品免费| 亚洲国产精品va在线看黑人| 亚洲最大av在线| 亚洲自拍偷拍一区| 欧美精品久久久久| 国产精品久久久久久久久粉嫩av| 国产精品亚洲视频在线观看| 3344国产精品免费看| 国产伦精品免费视频| 亚洲成人性视频| 日韩欧美在线网址| 久久久久久久一区二区三区| 中文字幕日韩电影| 欧美成人一区二区三区电影| 日韩免费av在线| 992tv成人免费视频| 92国产精品视频| 欧美激情国产日韩精品一区18| 日韩激情视频在线播放| 久久在线免费视频| 91九色综合久久| 欧美成年人网站| 国产成人一区二区三区电影| 日韩欧美在线看| 午夜精品一区二区三区在线播放| 在线视频欧美性高潮| 国产亚洲精品久久久久久777| 国产精品久久久久福利| 国产精品爽爽爽爽爽爽在线观看| 在线亚洲国产精品网| 亚洲一区中文字幕在线观看| 成人动漫网站在线观看| 在线视频日韩精品| 精品国产乱码久久久久酒店| 国产一区二区动漫| 国产精品永久免费视频| 97视频在线看| 伊人伊成久久人综合网小说| 国产精品久久久精品| 久久躁日日躁aaaaxxxx|