成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL中的分頁查詢語句介紹

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

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

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

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

1 select top 5 * from UserInfo order by UserID asc

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

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頁顯示的數據記錄的公式應該是:

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)的排序查詢,這樣查詢的結果才會正確。 還有一點,如何查詢數據庫滿足條件的記錄條數呢? 還記得我講過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 男性人數 from UserInfo where sex=1", connection); 
05 //打開Connection對象 
06 connection.Open(); 
07 //執行SQL語句 
08 //得到第一行第一列的結果,這里是所有用戶總數 
09 int count = int.Parse(command.ExecuteScalar().ToString()); 
10 //關閉Connection對象 
11 connection.Close();

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

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

 

 【編輯推薦】

批處理SQL語句的執行效率提高的方法

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

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

為您講解SQL動態語句的語法

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

責任編輯:段燃 來源: 互聯網
相關推薦

2010-10-27 10:11:07

Oracle分頁查詢

2010-10-21 11:44:55

SQL Server分

2010-09-26 15:29:13

sql查詢分頁

2010-09-07 14:36:24

SQL語句

2010-11-18 13:32:12

Oracle分頁查詢

2009-04-09 13:14:09

Oracle分頁查詢CBO

2010-05-04 15:15:39

Oracle分頁查詢

2009-07-20 16:56:16

SQL語句ASP.NET

2010-09-03 15:08:03

SQLselect語句

2010-09-25 14:38:29

SQL分頁

2010-09-03 15:27:02

SQLSELECT語句

2023-03-31 14:15:57

SQLORDER BY

2018-12-25 16:30:15

SQL Server高效分頁數據庫

2010-11-02 10:46:14

DB2分頁查詢

2010-11-18 13:40:48

mysql分頁查詢

2010-10-21 12:16:11

SQL Server查

2010-09-26 15:23:24

SQL語句

2010-09-08 17:10:24

SQL循環語句

2010-09-06 11:40:06

SqlServer語句

2010-11-12 13:40:38

動態sql語句
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 丁香久久| av一区二区三区 | 欧美日韩视频在线播放 | 97免费视频在线观看 | 亚洲综合在 | 欧美一区二区在线 | 亚洲精品一区二区三区蜜桃久 | 日韩一区二区福利 | 欧美日韩中文国产一区发布 | 欧美日韩国产在线 | 国产高清视频 | 91人人爽| 欧美黄色网 | 欧美成人一区二区三区 | 九九久久精品视频 | 国产免费一级一级 | 91电影| 国产成人免费视频网站视频社区 | 免费视频久久 | 亚洲综合在线一区二区 | 美女爽到呻吟久久久久 | 91香蕉| 亚洲自拍偷拍免费视频 | 91视频导航 | 亚洲一区高清 | 午夜丰满少妇一级毛片 | 男人天堂99 | 日韩av在线免费 | 成人福利视频 | 国产99久久精品一区二区永久免费 | 欧美国产精品一区二区三区 | 欧美成人猛片aaaaaaa | 婷婷在线网站 | 欧美一级大片免费看 | 亚洲精品第一国产综合野 | 国产精品日日夜夜 | 亚洲成人中文字幕 | 亚洲第一在线 | 最新91在线 | 国产精品第2页 | 久久久久久综合 |