由于數據庫記錄比較多,所以需要對查詢結果進行分頁顯示。下面是access數據庫的兩種分頁方法。
(學習視頻分享:編程入門)
一、Access查詢結果分頁方法一
1、方法
設每頁記錄數為CntPerPage,要獲得第Page頁的查詢結果,用以下sql語句。
SELECT?*?FROM?( SELECT?TOP?CntPerPage?*?FROM( SELECT?TOP?Page*CntPerPage?*?FROM?TableName?WHERE?Query_Conditionm?ORDER?BY?OrderField )?ORDER?BY?OrderField?DESC )?ORDER?BY?OrderField
其中TableName為表名,Query_Condition為查詢條件,OrderField為用來排序的字段名
2、原理
嵌套使用三步查詢:
第一步查詢:將當前頁及之前所有頁的記錄查詢出來,并按排序字段降序排列
SELECT?TOP?Page*CntPerPage?*?FROM?TableName?WHERE?Query_Conditionm?ORDER?BY?OrderField
第二步查詢:將剛才查詢出來的記錄(已降序排列)的前CntPerPage個記錄查詢出來(保持降序排列),這些就是第Page頁的所有記錄
SELECT?TOP?CntPerPage?*?FROM(?第一步查詢結果?)?ORDER?BY?OrderField?DESC
第三步查詢:上一步查詢實際已經把第Page頁的記錄全部查詢出來了,只不過是降序排列的,這第三步只是把剛獲得的這些數據變成正序排列。如果對順序不要求,或者程序中有其它的數據排序處理,那么這一步就可以省略了。
SELECT?*?FROM?(?第二步查詢結果?)?ORDER?BY?OrderField
3、舉例
一個Student表,要查詢年齡age小于20歲的所有記錄,按姓名name排序,每頁記錄數為100,要獲得第5頁的查詢結果,則用以下SQL語句。
SELECT?*?FROM?(SELECT?TOP?100?*?FROM(?SELECT?TOP?500?*?FROM?Student??WHERE?age<p>二、網上常用的NOT IN方法</p><p>在網上搜索分頁方法時,這是最常見到的一種方法。<br>方法:</p><pre class="brush:html;toolbar:false">SELECT?TOP?CntPerPage?*?FROM?TableName?WHERE?Query_Conditionm?AND?id?NOT?IN?( SELECT?TOP?(Page-1)*CntPerPage?id?FROM?TableName?WHERE?Query_Conditionm?ORDER?BY?id )?ORDER?BY?id
原理:
兩步查詢:
第一步:把本頁之前的所有符合條件的記錄id選擇出來
SELECT?TOP?(Page-1)*CntPerPage?id?FROM?TableName?WHERE?Query_Conditionm?ORDER?BY?id
第二步:加入查詢條件“id不在剛才選擇出來的那些id查詢結果里”,取前CntPerPage個記錄,這樣,查詢結果就恰好過濾了前Page-1頁的所有數據,之后就選擇了第Page頁的所有記錄。
SELECT?TOP?CntPerPage?*?FROM?TableName?WHERE?Query_Conditionm?AND?id?NOT?IN?(第一步查詢結果)?ORDER?BY?id
三、分頁查詢效率
實際測試兩種方法的效率差不多,但個人認為第二種方法里的NOT IN這類判斷的效率應該不會太高,所以覺得如果記錄量比較龐大時應該第一種方法更高效些。
相關推薦:編程入門