人妻夜夜爽天天爽三区丁香花-人妻夜夜爽天天爽三-人妻夜夜爽天天爽欧美色院-人妻夜夜爽天天爽免费视频-人妻夜夜爽天天爽-人妻夜夜爽天天

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

SQL Server 替代實現 MySQL 中 LIMIT 的方法

admin
2025年1月9日 21:57 本文熱度 187

在數據庫管理中,查詢結果的有效限制是優化性能和確保檢索相關數據的關鍵。許多SQL數據庫系統,如MySQL和PostgreSQL,使用LIMIT子句來指定查詢返回的記錄數。然而,SQL Server不支持LIMIT子句,而是使用TOP, OFFSET-FETCH和SET ROWCOUNT這樣的替代方案。這種設計體現了SQL Server的靈活性和高性能,它提供了各種方法來實現類似的限制功能,同時滿足不同的用例和場景。

讓我們仔細看看SQL Server中的LIMIT選項,重點介紹它們的獨特功能和限制。

?
使用SELECT TOP子句
?

在SQL Server中,SELECT TOP子句可以替代LIMIT子句,可以用于限制查詢返回的行數。當你處理大型數據集并且只想檢索記錄的一個子集時,它特別有用。基本語法是:

SELECT TOP (number | percent) column_names FROM table_name;

這里,number表示要返回的確切行數,而percent是要從總結果集中返回的行數的百分比。根據你的需要使用其中一個參數。

-- 查詢返回按雇傭日期的前5名員工SELECT TOP 5 * FROM HumanResources.Employee ORDER BY HireDate;
-- 查詢休假超過20小時的前10%員工SELECT TOP 10 PERCENT *FROM HumanResources.Employee WHERE VacationHours > 20;

SELECT TOP不提供隨機行。為了實現隨機性,可以將其與ORDER BY NEWID() 結合使用,但這對于大型數據集來說效率很低。另一方面,如果不指定ORDER BY子句,結果可能是不可預測的,因為SQL Server不能保證返回行的順序。

?
用OFFSET-FETCH實現分頁
?

說到分頁,SQL Server中可以使用 offset - fetch來實現分頁,允許你通過跳過一些行,然后獲取定義數量的行來檢索特定的記錄子集。這個子句的語法如下:

ORDER BY order_by_expression[ COLLATE collation_name ][ ASC | DESC ][ , ...n ][ <offset_fetch> ]<offset_fetch> ::={    OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }    [      FETCH { FIRST | NEXT } { integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY    ]}

OFFSET子句允許你指定在返回行之前需要跳過多少行,而FETCH NEXT定義在跳過行之后要返回多少行。

SELECT * FROM HumanResources.Employee ORDER BY BusinessEntityID OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;

我們將頁行數、頁碼作為參數,可以實現動態分頁查詢。

DECLARE @PageSize INT = 10; DECLARE @PageNumber INT = 5; SELECT BusinessEntityID, JobTitle, HireDate FROM HumanResources.Employee ORDER BY BusinessEntityID OFFSET (@PageSize * (@PageNumber - 1)) ROWS FETCH NEXT @PageSize ROWS ONLY;

OFFSET-FETCH遵循SQL標準,使其可移植并易于開發人員理解。最重要的是,與其他方法(如 ROW_NUMBER())不同,OFFSET-FETCH直接跳過并獲取行,而不需要復雜的變通方法。

但需要注意的是,對于大型數據集,在分頁中越往后查詢(如第1000頁),查詢可能會變得越慢,因為SQL Server必須跳過更多行。需要考慮的另一點是,OFFSET-FETCH不返回總行數,因此如果需要顯示分頁元數據(如總頁數),則需要一個額外的查詢 count(*) 來獲取總行數。記住,當使用OFFSET-FETCH時,ORDER BY子句是強制性的,否則,結果是不可預測的。

?
使用SET ROWCOUNT命令
?

在SQL Server中,可以使用SET ROWCOUNT命令來限制SELECT語句返回或受UPDATE或DELETE影響的行數。命令格式如下:

SET ROWCOUNT { number | 0 }

不是指定number,而是指定要返回或處理的行數,0表示重置行計數。

如果你將SET ROWCOUNT和SELECT與其他命令(如ORDER BY和WHERE)一起使用,它們的交互將非常強大。在這種組合中,WHERE子句首先過濾行,ORDER BY子句對過濾的行進行排序,然后SET ROWCOUNT限制從排序的結果集中返回的行數。

下面我們查詢前5條記錄,然后重置行數限制,以便后續的查詢返回所有匹配的行:

SET ROWCOUNT 5; SELECT * FROM HumanResources.Employee WHERE VacationHours > 50 ORDER BY JobTitle; SET ROWCOUNT 0;

SET ROWCOUNT也可以用于DML ,它與select的工作原理類似。

SET ROWCOUNT 1; UPDATE HumanResources.Employee SET JobTitle = 'Chief Stocker' WHERE JobTitle = 'Stocker'; 
SET ROWCOUNT 0; SELECT * FROM HumanResources.Employee WHERE JobTitle LIKE ('%Stocker%') ORDER BY JobTitle;

SET ROWCOUNT提供了一種簡單的方法來限制結果,使用非常簡單,主要優勢有:

  • 不需要對原有的SQL進行更改,就可以限制性查詢;

  • 對整個會話生效,不影響到其他會話;

  • 大量數據的DELETE和UPDATE,可以結合@@ROWCOUNT分批分成小事務處理;

注意,SET ROWCOUNT現在越來越不常用了。隨著SQL標準的發展,現代SQL實踐傾向于對結果集和數據操作進行更顯式的控制。因此微軟建議使用TOP子句,因為TOP子句提供了更清晰的語義,SET ROWCOUNT在SQL Server 2022版本之后的未來版本中不會影響DELETE和UPDATE語句。

?
方案比較
?

綜上所述,讓我們簡單地比較一下上面討論過的SQL Server的LIMIT子句:

  • SELECT TOP:最適合從結果集中快速檢索指定數量的行,特別是在需要固定限制的情況下。對于一些報告或儀表板,其中只需要前N個記錄。

  • OFFSET-FETCH:最適合大型數據集的分頁。它允許你跳過指定數量的行,并返回定義的行集,因此非常適合跨多個頁面顯示結果。

  • SET ROWCOUNT:在舊版本的SQL Server中用于限制行數,或用于更新或刪除特定數量的記錄。然而,它的使用正在減少,取而代之的是TOP和OFFSET-FETCH。


閱讀原文:原文鏈接


該文章在 2025/1/10 11:13:37 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产精品国产三级国产潘金莲 | 99久久久国产精品无码 | 波多野结衣国产一区二区在线观看 | 精品国产欧美另类一区 | 免费永久观看美女视频网站网址 | 中文成人久久久久影院免费观看 | 国产精品夜夜春夜夜爽久久小说 | 欧美精品国产一区二区 | 日韩精品无码一区二区中文 | 国产精品系列一区二区三区 | 99热久久是有精品首页 | 欧美日韩国产精品综合91蜜桃 | 亚洲一卡2卡3卡4卡5卡新国色天香 | 大胆日本无码一区二区 | 日本嫩p| 揄拍自拍| 国产成年女黄特黄 | 国产综合在线视频 | 国产精品网站在线观看免费传媒 | 国产a级毛片久久精品电影 国产a级毛片久久久精品毛片 | 国产精品美女久久久久久麻 | 国产精品99久久久精品无码 | 欧美午夜a∨大片久久 | 黄色免费在线观看网址 | 中文文字幕文字幕亚洲色 | 日日摸夜夜添夜夜添久久 | 国色天香精品一卡2卡三卡4卡 | 亚洲本色精品一区二区久久 | 波多野结衣欧 | 麻豆精品乱码一二三区别蜜臀在线 | 亚洲av无码天堂一区二区三区 | 国产三级精品在线免费观看 | 成人免费一区二区三区 | 亚洲乱码精品久久久久.. | av人妻社区 | 久久无码人妻一二区 | 中文亚洲AV片在线观看无码 | 欧美精品一区天堂久久 | 一区三区无码毛片 | 精品国产精品乱码不卞 | 国产精品夜夜春夜夜爽久久小说 |