<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
現在基本上大家都在使用各種輪子自帶的分頁,大家是否還記得sql分頁怎麼寫?
今天我們就來盤一盤怎麼寫和用哪種方式寫。
歡迎大家評論區討論。
範例:
SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY menuId) AS RowId,* FROM sys_menu ) AS r WHERE RowId BETWEEN 1 AND 10
用子查詢新增一列行號(ROW_NUMBER)RowId查詢,比較高效的查詢方式,只有在SQL Server2005或更高版本才支援。
BETWEEN 1 AND 10 是指查詢第1到第10條資料(閉區間),在這裡面需要注意的是OVER的括號裡面可以寫多個排序欄位。
查詢結果如下:
通用用法
--pageIndex 表示指定頁 --pageSize 表示每頁顯示的條數 SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY 排序欄位) AS RowId,* FROM 表名 ) AS r WHERE RowId BETWEEN ((pageIndex-1)*pageSize + 1) AND (pageIndex * PageSize)
範例:
--offset fetch next方式查詢,最高效的查詢方式,只有在SQL Server2012或更高版本才支援 SELECT * FROM sys_menu ORDER BY menuId offset 0 ROWS FETCH NEXT 10 ROWS ONLY
offset 是跳過多少行,
next是取接下來的多少行,
句式 offset...rows fetch nect ..rows only ,注意rows和末尾的only 不要寫漏掉了,並且這種方式必須要接著Order by XX 使用,不然會報錯。
查詢結果如下:
通用用法
--pageIndex 表示指定頁 --pageSize 表示每頁顯示的條數 SELECT * FROM 表名 ORDER BY 排序欄位 offset ((pageIndex - 1) * pageSize) ROWS FETCH NEXT pageSize ROWS ONLY
範例:
--查詢第11-20條記錄 SELECT TOP 10 menuId, * FROM sys_menu WHERE menuId NOT IN (SELECT TOP 10 menuId FROM sys_menu)
這條語句的原理是先查詢1-10條記錄的ID,然後再查詢ID不屬於這1-10條記錄的ID,並且只需要10條記錄,因為每頁大小就是10,
這就是獲取到的第11-20條記錄,這是非常簡單的一種寫法。
另外IN語句與NOT IN語句類似,這是NOT IN的寫法,但是這種寫法資料量大的話效率太低。
查詢結果如下:
通用用法
--pageIndex 表示指定頁 --pageSize 表示每頁顯示的條數 SELECT TOP pageSize menuId, * FROM sys_menu WHERE menuId NOT IN (SELECT TOP ((pageSize-1)*pageIndex) menuId FROM sys_menu)
範例:
--使用升序降序的方式分頁查詢 SELECT * FROM( SELECT TOP 10 * FROM( SELECT TOP 20 * FROM sys_menu ORDER BY menuId ASC) AS TEMP1 ORDER BY menuId DESC) AS TEMP2 ORDER BY menuId ASC
這條語句首先查詢前20條記錄,然後在倒序查詢前10條記錄(即倒數10條記錄),
這個時候就已經獲取到了11-20條記錄,但是他們的順序是倒序,所以最後又進行升序排序。
查詢結果如下:
通用方法
--pageIndex 表示指定頁 --pageSize 表示每頁顯示的條數 SELECT * FROM( SELECT TOP pageSize * FROM( SELECT TOP ((pageIndex - 1) * pageSize +(pageSize*2)) * FROM sys_menu ORDER BY menuId ASC) AS TEMP1 ORDER BY menuId DESC) AS TEMP2 ORDER BY menuId ASC
範例:
--MIN()函數和MAX()函數的使用 --id > 第(PageIndex-1)*PageSize條記錄的id AND id <= 第PageIndex*PageSize條記錄的id SELECT TOP 10 * FROM sys_menu WHERE menuId> (SELECT MAX(menuId) FROM(SELECT TOP 10 menuId FROM sys_menu ORDER BY menuId) AS TEMP1) --(第10條的id)
這個理解起來也簡單,先把第10條記錄的id找出來(當然這裡面是直接使用MAX()進行查詢,MIN()函數的用法也是類似的),
然後再對比取比第10條記錄的id大的前10條記錄即為我們需要的結果。
這裡要注意開始時的邊界值調整。
查詢結果如下:
通用用法
--pageIndex 表示指定頁 --pageSize 表示每頁顯示的條數 SELECT TOP pageSize * FROM sys_menu WHERE menuId> (SELECT MAX(menuId) FROM(SELECT TOP ((PageIndex-1)*PageSize) menuId FROM sys_menu ORDER BY menuId) AS TEMP1) --(第10條的id)
我們在資料庫分頁的時候,還可以在程式碼裡面使用lambda表示式分頁。
範例:
List<int> list = new List<int>(); for (int i = 0; i < 100; i++) { list.Add(i); } //從第11條資料開始,獲取10條資料 list = list.Skip(11).Take(10).ToList(); //返回值 11,12,13,14,15,16,17,18,19,20
Skip: 表示從第 (pageIndex * pageSize + 1) 條資料開始,也就是說再這之前有pageIndex * pageSize條資料。
Task:表示獲取多少條資料。
通用用法
list = list.Skip(pageIndex * pageSize +1 ).Take(pageSize).ToList();
以上就是資料查詢中經常用到的方式,
在資料庫版本支援的情況下個人推薦程度排序:offset fetch netct > lambda > ROW_NUMBER() OVER() ,後面的就不推薦使用 。
這樣就可以配合儲存過程進行分頁了。
到此這篇關於盤點SqlServer 分頁方式和拉姆達表示式分頁的文章就介紹到這了,更多相關SqlServer 分頁拉姆達表示式分頁內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45