好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 詳解SQLServer和Oracle的分頁查詢

詳解SQLServer和Oracle的分頁查詢

熱門標簽:地圖標注跑線下市場 地圖標注可以編輯地名嗎 臺灣外呼系統軟件 樂昌電話機器人 南通智能外呼系統怎么樣 南京怎么申請400這種電話 濮陽清豐400開頭的電話申請 疫情時期電話機器人 真3地圖標注

不管是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是頁面需要提供的信息)。具體的計算公式:

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 代替。
   其他查詢都是大同小異的,這里不再贅述。

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

您可能感興趣的文章:
  • oracle,mysql,SqlServer三種數據庫的分頁查詢的實例
  • Oracle實現分頁查詢的SQL語法匯總
  • Oracle、MySQL和SqlServe三種數據庫分頁查詢語句的區別介紹
  • Oracle分頁查詢性能優化代碼詳解
  • Oracle分頁查詢的實例詳解
  • mysql、mssql及oracle分頁查詢方法詳解
  • 詳解oracle分頁查詢的基礎原理
  • oracle實現一對多數據分頁查詢篩選示例代碼
  • Oracle使用MyBatis中RowBounds實現分頁查詢功能
  • 簡單實例解釋Oracle分頁查詢

標簽:廣安 南京 通遼 馬鞍山 阿里 河北 福建 陜西

巨人網絡通訊聲明:本文標題《詳解SQLServer和Oracle的分頁查詢》,本文關鍵詞  詳解,SQLServer,和,Oracle,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解SQLServer和Oracle的分頁查詢》相關的同類信息!
  • 本頁收集關于詳解SQLServer和Oracle的分頁查詢的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 中文字幕亚洲综合久久综合第6集| 秋霞电影2020进口| 美女黄频视频大全免费高清| 紧身裙女教师在线观看| 欧美一级美片在线观看免费| 被强小说录目伦| 富蕴县| 我和老妇们的乱| 黄蓉嗯啊| 中文一级毛片| 嗷嗷叫喷ThePorn| bdsm虐乳挤奶| 岳潮湿的大肥| 色胡同 热 国产の综合| 手机看片日韩日韩国产在线看 | 好男人在线社区WWW第71集| 日本一区二区三区免费看| 888午夜不卡理论久久| 一级A片女人18| 积积对积积的桶免费视频| 毛片区| 亚洲精品乱码久久久久| 九力热线视频精品2| 欧美日本在线一区二区三区| 毛片小视频| 高贵麻麻被迫沦为玩物| 国产亲妺妺乱的69视频免| 吃奶喂奶合集| 被玩坏的丈夫h| 天天干b| 91av俱乐部| 天天摸夜夜摸狠狠摸夜夜摸| 开嫩苞破呦处| 麻豆亚洲| 女人与公拘交酡| 插美女阴道| HD 亚洲精品电视剧在线观看| 痴女OL裤袜波多野结衣| 久操这里只有精品| 人人爽爽精品欧美久久久天天影院| 久久毛片久久**|