今天給大家介紹一下TOP、OFFSET-FETCH、SET ROWCOUNT用法筆記,希望對大家能有所幫助!
1、 TOP用法
語法格式:
TOP ( expression ) [ PERCENT ] [ WITH TIES ]
expression:返回行數的數值表達式
PERCENT:指返回的結果集行的百分比。
用法:
--從UserInfo數據表提取20行記錄SELECT TOP 20 * FROM UserInfo;--UserInfo數據表提取10%行記錄SELECT TOP 10 PERCENT * FROM UserInfo;
表達式中指定返回的行數或百分比,則必須將表達式包含在括號內。用法如下:
DECLARE @n AS int;SET @n = 12SELECT TOP (@n) *FROM UserInfo ;
注意:在未指定ORDER BY子句的情況下,TOP子句返回的數據行,是那些在物理循序上優先訪問到的行,而并不一定是邏輯上的前幾行。
簡單來說,這種返回結果具有不確定性。即使指定了ORDER BY子句,但是所指定的排序列中含有重復值,返回的結果也具有不確定性。不確定的數據,對于數據使用而言,沒有多少價值。
解決列中存在重復值時返回結果的不確定性問題,可以使用WITH TIES 關鍵字。該關鍵字將指定返回包含ORDER BY子句返回的最后一個值的所有行,這樣將超過expression指定的數量。
示例:
SELECT TOP 2 WITH TIES FROM UserInfoORDER BY CreateDate
2、OFFSET-FETCH用法
SQL Server 2012版本引入了對OFFSET-FETCH技術的支持。
OFFSET-FETCH篩選通常被視為ORDER BY子句的一部分,通常用于實現按順序分頁顯示效果。OFFSET指定要跳過的行數,FETCH指定在跳過的行數后要篩選的行數
用法:
SELECT UserID, Birthday, Name,AgeFROM UserInfoORDER UserIDOFFSET 20 ROWS FETCH NEXT 15 ROWS ONLY;
注意:使用OFFSET-FETCH的查詢必須具有ORDER BY子句。此外,FETCH子句也必須有OFFSET子句。如果不想跳過任何行,但是希望使用FETCH篩選,可以使用OFFSET 0 ROWS來表示。不過,單獨使用FETCH表示跳過指定的行數,并返回查詢結果中所有剩余行。
OFFSET-FETCH語法有一些有趣的語言方面需要注意。單數格式ROW和復數格式ROWS是可以互換的,因此能夠以直觀的類似英語方式來描述篩選。
例如,假設僅希望獲取一行,如果指定了FETCH 1 ROWS,雖然這在語法上是有效的,不過看上去會很怪。因此,可以使用FETCH 1 ROW格式。此互換同樣適用于OFFSET子句。另外,如果不希望跳過任何行(OFFSET 0 ROWS),可能覺得“first”比“next”更合適,因此,FIRST和NEXT格式是可以互換的。
從支持跳過功能看,OFFSET-FETCH子句比TOP子句更靈活。但OFFSET-FETCH不支持PERCENT和WITH TIES選項,而TOP支持。由于OFFSET-FETCH是標準的,而TOP不是,建議使用OFFSET-FETCH作為默認選擇,除非你需要TOP支持且OFFSET-FETCH不支持的功能。
3、SET ROWCOUNT語句
SET ROWCOUNT n 語句限制結果集的大小,該語句指定在返回指定的n行后停止處理查詢。SET ROWCOUNT與TOP的差別如下:
SET ROWCOUNT限制適用于計算ORDER BY后在結果集中生成行。如果指定了ORDER BY,SELECT語句將從分類排序后的某個值集中選擇n行后結束。
TOP和OFFSET-FETCH適用于單個SELECT語句。直到執行下一個SET ROWCOUNT語句前,SET ROWCOUNT設置將一直有效。如果執行SET ROWCOUNT 0將關閉該選項。
說明:TOP和OFFSET-FETCH性能要優于使用SET ROWCOUNT,應當盡量避免使用SET ROWCOUNT。
用法:
SET?ROWCOUNT?4;
SELECT TOP 20 *
FROM UserInfo;
IT技術分享社區
個人博客網站:https://programmerblog.xyz
文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識