自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL中的分頁查詢語句介紹

數(shù)據庫 SQL Server
如果我們經常遇到表里的記錄數(shù)非常龐大(數(shù)萬至數(shù)百萬),而一次只顯示幾十條數(shù)據的情況,就需要用到分頁查詢語句,下面就將為您詳細介紹SQL中的分頁查詢語句,供您參考。

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

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

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

1 select top 5 * from UserInfo order by UserID asc

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

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ù)據記錄的公式應該是:

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#

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

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

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

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

 

 【編輯推薦】

批處理SQL語句的執(zhí)行效率提高的方法

SQL語句中特殊字符的處理方法

教您用SQL語句進行模糊查詢

為您講解SQL動態(tài)語句的語法

SQL中隨機數(shù)函數(shù)rand()簡介

責任編輯:段燃 來源: 互聯(lián)網
相關推薦

2010-10-27 10:11:07

Oracle分頁查詢

2010-10-21 11:44:55

SQL Server分

2010-11-18 13:32:12

Oracle分頁查詢

2010-09-26 15:29:13

sql查詢分頁

2010-09-07 14:36:24

SQL語句

2010-05-04 15:15:39

Oracle分頁查詢

2009-07-20 16:56:16

SQL語句ASP.NET

2009-04-09 13:14:09

Oracle分頁查詢CBO

2010-09-03 15:08:03

SQLselect語句

2010-09-03 15:27:02

SQLSELECT語句

2010-09-25 14:38:29

SQL分頁

2023-03-31 14:15:57

SQLORDER BY

2018-12-25 16:30:15

SQL Server高效分頁數(shù)據庫

2010-11-18 13:40:48

mysql分頁查詢

2010-09-26 15:23:24

SQL語句

2010-11-02 10:46:14

DB2分頁查詢

2010-10-21 12:16:11

SQL Server查

2010-11-25 14:33:26

MySQL查詢分頁

2010-09-08 17:10:24

SQL循環(huán)語句

2010-11-12 13:40:38

動態(tài)sql語句
點贊
收藏

51CTO技術棧公眾號