中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-08-03 17:50:18 來源:億速云 閱讀:151 作者:Leah 欄目:數據庫

本篇文章為大家展示了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中怎么實現分頁查詢,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

凌云县| 临夏市| 泰宁县| 朝阳县| 阿城市| 彩票| 封开县| 万载县| 宁阳县| 三都| 吴川市| 高雄市| 五莲县| 从江县| 娱乐| 温州市| 汉中市| 承德县| 惠州市| 弥渡县| 中卫市| 本溪| 常州市| 兰考县| 苍梧县| 江永县| 洪雅县| 团风县| 南澳县| 繁昌县| 虹口区| 承德市| 卓尼县| 和平县| 庆云县| 金秀| 皋兰县| 科尔| 龙游县| 青铜峡市| 敦化市|