日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SQL中的分頁查詢語句介紹

使用SQL語句查詢時(shí),如果表里的記錄數(shù)過于龐大,就需要用到分頁查詢語句,下面就將為您詳細(xì)介紹SQL中的分頁查詢語句,供您參考。

在實(shí)際中我們經(jīng)常遇到表里的記錄數(shù)非常龐大(數(shù)萬至數(shù)百萬),而一次只顯示幾十條數(shù)據(jù)的情況,如果我們直接用下面的SQL語句查詢并填充到DataTable的話,將是一個(gè)非??植赖氖虑?假設(shè)UserInfo有幾百萬用戶數(shù)據(jù)): Select * from UserInfo

分頁查詢就是根據(jù)需要每次只返回所需要的數(shù)據(jù),而不用每次都從數(shù)據(jù)庫中全部把數(shù)據(jù)提取出來,這樣可以降低程序與數(shù)據(jù)庫之間的數(shù)據(jù)傳送量,并且還可以提高程序的性能。 一般來說我們?cè)跀?shù)據(jù)量大的情況下總是會(huì)分頁顯示(誰也不會(huì)一下子將幾萬條數(shù)據(jù)全部一次性顯示給用戶),這樣決定我們返回的查詢結(jié)果集的參數(shù)有兩個(gè):當(dāng)前顯示的頁數(shù)pageIndex和每頁顯示的記錄條數(shù)size。這里來舉例在SQL Server中我們?nèi)绾螌懛猪摬樵兊腟QL語句,假設(shè)我們按照UserID字段降序查詢,每頁顯示5條記錄。查詢語句如下:

view source print ?

1 select top 5 * from UserInfo order by UserID asc

第一頁我們可以按照對(duì)UserID降序查詢,并利用top 5取出前5條記錄??墒堑诙摰腟QL語句我們?cè)撛趺磳懩??第二頁顯示的數(shù)據(jù)應(yīng)該是按照UserID降序排列之后第6條到10條記錄,有沒有辦法做到這一點(diǎn)呢?有兩種辦法:第一種就是前面我所提到的一次性將全部數(shù)據(jù)提取并填充到DataTable中,然后在for循環(huán)中通過i從5開始,并且i小于10(因?yàn)樵贑#中所有的集合下標(biāo)都是從0開始的,第六條記錄的下標(biāo)就是5)這種方法顯示5條數(shù)據(jù),但是這種做法的缺點(diǎn)我在前面也提到了。第二種辦法就是在數(shù)據(jù)庫中過濾。我們通過分析發(fā)現(xiàn),第二頁要顯示的記錄的UserID字段有以下特點(diǎn):它們是緊跟這第一頁顯示的記錄之后的5條記錄,也就是通過對(duì)UserID字段進(jìn)行降序排列時(shí),它們是除了第一頁數(shù)據(jù)之后的5條記錄,也就是它們的UserID不在第一頁的UserID之中,在SQL語句有一個(gè)not in這個(gè)正好可以排上用場(chǎng)。 首先我們按照對(duì)UserID進(jìn)行降序排序,查詢出前面第一頁使用的數(shù)據(jù)的UserID,SQL語句及執(zhí)行結(jié)果如下:

view source print ?

1 select top 5 * from UserInfo where UserId not in
2 (select top 5 UserID from UserInfo order by UserID asc)order by UserID asc

UserID是從1開始,所以UserID在1至5的記錄在第一頁顯示,UserID為6至10的記錄在第二頁顯示,UserID為11至15的記錄在第三頁顯示……依此類推,如果每頁顯示5條記錄,那么第n頁顯示的數(shù)據(jù)記錄的公式應(yīng)該是:

view source print ?

1 select top 5 * from UserInfo where UserId not in 
2 (select top (n-1)*5 UserID from UserInfo order by UserID asc) order by UserID asc

#p#

需要注意的是:上面的查詢,兩次都是對(duì)UserID進(jìn)行排序,并且都是降序,也就是說我們分頁查詢的時(shí)候?qū)戇@種SQL語句的時(shí)候一定要都是對(duì)同一字段進(jìn)行相同方式(asc或desc)的排序查詢,這樣查詢的結(jié)果才會(huì)正確。 還有一點(diǎn),如何查詢數(shù)據(jù)庫滿足條件的記錄條數(shù)呢? 還記得我講過Command對(duì)象的ExecuteScalar()方法吧,這個(gè)方法就是返回查詢結(jié)果的第一行第一列的。
下面是例子:

view source print ?

01 //實(shí)例化Connection對(duì)象 
02 SqlConnection connection = new SqlConnection("server=localhost;database=pubs;uid=sa;pwd='' "); 
03 //實(shí)例化Command對(duì)象 
04 SqlCommand command = new SqlCommand("select count(1) as 男性人數(shù) from UserInfo where sex=1", connection); 
05 //打開Connection對(duì)象 
06 connection.Open(); 
07 //執(zhí)行SQL語句 
08 //得到第一行第一列的結(jié)果,這里是所有用戶總數(shù) 
09 int count = int.Parse(command.ExecuteScalar().ToString()); 
10 //關(guān)閉Connection對(duì)象 
11 connection.Close();

最后一點(diǎn),如果計(jì)算總頁數(shù)的問題。假如我們有20條記錄,每頁顯示5條,毫無疑問總共分4頁顯示。如果是21條記錄呢?答案是分5頁顯示,盡管最后一頁只有一條記錄,但是還是要顯示的。這里也有一個(gè)公式,假如總共有m條記錄,每頁顯示n條記錄(這里m,n都是大于0的整數(shù))那么需要顯示全部記錄所用到的頁數(shù)page為:

view source print ?

1 page=(m%n)==0?(m/n):(m/n+1);

分享名稱:SQL中的分頁查詢語句介紹
分享地址:http://www.5511xx.com/article/dpicoso.html