奚科芳
摘要:在應(yīng)用程序的開發(fā)中經(jīng)常要用到各類關(guān)系數(shù)據(jù)庫,本文主要闡述了目前流行的關(guān)系數(shù)據(jù)庫ORACLE數(shù)據(jù)庫、My SQL數(shù)據(jù)庫、SQL Server數(shù)據(jù)庫常用實(shí)現(xiàn)分頁的方法。
關(guān)鍵詞:ORACLE;My SQL;SQL Server;實(shí)現(xiàn)分頁
中圖分類號:TP311.13 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-9416(2020)01-0044-02
0 引言
不管在PC Web開發(fā)還是在移動Web開發(fā)中幾乎都要用到數(shù)據(jù)庫,為了方便美觀的展示數(shù)據(jù),使用分頁是必不可少的一項(xiàng)技術(shù)。本文主要講述了當(dāng)前常用關(guān)系數(shù)據(jù)庫ORACLE數(shù)據(jù)庫、My SQL數(shù)據(jù)庫、SQL Server數(shù)據(jù)庫實(shí)現(xiàn)分頁方法。
目前普通使用的關(guān)系數(shù)據(jù)庫有ORACLE,My SQL,SQL Server,這三種數(shù)據(jù)庫在實(shí)現(xiàn)分頁時其分頁查詢語句又有差別,但在應(yīng)用程序調(diào)用時,給出的參數(shù)基本都是相同的。已知當(dāng)前頁號和每頁顯示記錄數(shù),那需要考慮起始記錄數(shù)和結(jié)束記錄數(shù)與頁碼與每頁顯示的記錄之間關(guān)系。各參數(shù)關(guān)系分析如下:
pageSize ? ?-- 用來表示每頁要顯示的記錄數(shù),可提前給定
currentPage ? ?-- 用來表示當(dāng)前頁的變量,可提前給定
start? ? ? ?-- 用來表示從那一條記錄開始顯示,需計算
end? ? ? ? ?-- 用來表示那一條記錄結(jié)束顯示,需計算
start=(currentPage-1)*pageSize -- 開始顯示的查詢記錄條數(shù)計算公式
end=currentPage*pageSize -- 結(jié)束顯示的查詢記錄條數(shù)計算公式
存在關(guān)系模式emp(empno,ename,job,hiredate,sal,comm,deptno),其表示員工表中包括的字段有:員工編號、員工姓名、崗位、入職日期、月薪、獎金、部門編號。其表信息見表1。
1 Oracle數(shù)據(jù)庫實(shí)現(xiàn)分頁
1.1 思路
ROWNUM是一個偽例,可以返回結(jié)果集的順序號,在SQL查詢語句中用它可以控制查詢的起始記錄條數(shù)和終止條數(shù),在應(yīng)用程序開發(fā)過程中只需將起始條數(shù)和終止條數(shù)作為專門的分頁sql語句傳入即可查詢出想要的結(jié)果。以查詢顯示員工表中第“start”條到“end”條記錄為例。
1.2 相關(guān)sql格式
以上SQL查詢語句存在錯誤,因?yàn)镽OWNUM只能執(zhí)行<、<=運(yùn)算,不能執(zhí)行>、>=或一個區(qū)間運(yùn)算Between…and等。另ROWNUM和ORDER BY一起使用時,因?yàn)镽OWNUM在記錄輸出時生成,而ORDER BY子句在最后執(zhí)行,所以當(dāng)兩者在一起使用時,其ROWNUM實(shí)際是已經(jīng)被排了序的ROWRUM。
1.4 常用通用sql分頁格式
2.1 思路
“Top記錄數(shù)”表示可以顯示前多少記錄數(shù)的信息。先取前currentPage頁記錄,然后倒序,取倒序后前pageSize條記錄,這樣就能得到分頁所需要的數(shù)據(jù),不過順序反了,之后可以將再倒序回來,也可以不再排序了,直接交給前端排序。
2.2 常用通用sql分頁格式
3.1 思路
MySQL有個專門針對查詢出一段數(shù)據(jù)的語句limit,使用起來非常的方便。
上面查詢中LIMIT? start,pagesize代表從第start條(不包含第2條)數(shù)據(jù)開始查詢出pagesize條記錄。
3.2 通用sql分頁格式
4 結(jié)語
每種數(shù)據(jù)庫都有它自己的優(yōu)點(diǎn)及局限性,適用于不同的要求范圍,每種數(shù)據(jù)庫實(shí)現(xiàn)分頁的方法有多種,本文重點(diǎn)講述了三種數(shù)據(jù)庫最通用、效率相對高的分頁方法,Oracle數(shù)據(jù)庫利用ROWNUM偽列來實(shí)現(xiàn)分頁,SQL Server數(shù)據(jù)庫利用TOP來實(shí)現(xiàn)分頁,My SQL數(shù)據(jù)庫利用LIMIT來直接實(shí)現(xiàn)分頁,其中分頁實(shí)現(xiàn)起來最簡單的是My SQL數(shù)據(jù)庫。
參考文獻(xiàn)
[1] 孫風(fēng)棟,閆海珍.Oracle 10g數(shù)據(jù)庫海量數(shù)據(jù)分頁查詢優(yōu)化[J].計算機(jī)應(yīng)用與軟件,2011(9):137-139.
[2] 張輝,趙郁亮,徐江,等.基于Oracle數(shù)據(jù)庫海量數(shù)據(jù)的查詢優(yōu)化研究[J].計算機(jī)技術(shù)與發(fā)展,2012(2):165-167.
[3] 徐越人.Oracle Rownum的使用與JSP頁顯示的實(shí)現(xiàn)[J].計算機(jī)與現(xiàn)代化,2007(10):86-90.
[4] 齊心.Oracle數(shù)據(jù)庫分頁技術(shù)的應(yīng)用[J].智庫時代,2019(14):221+226.