您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何使用TOP、OFFSET-FETCH、SET ROWCOUNT語句”,在日常操作中,相信很多人在如何使用TOP、OFFSET-FETCH、SET ROWCOUNT語句問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何使用TOP、OFFSET-FETCH、SET ROWCOUNT語句”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
語法格式: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 = 12 SELECT TOP (@n) * FROM UserInfo ;
注意:在未指定ORDER BY子句的情況下,TOP子句返回的數據行,是那些在物理循序上優先訪問到的行,而并不一定是邏輯上的前幾行。簡單來說,這種返回結果具有不確定性。即使指定了ORDER BY子句,但是所指定的排序列中含有重復值,返回的結果也具有不確定性。不確定的數據,對于數據使用而言,沒有多少價值。解決列中存在重復值時返回結果的不確定性問題,可以使用WITH TIES 關鍵字。該關鍵字將指定返回包含ORDER BY子句返回的最后一個值的所有行,這樣將超過expression指定的數量。示例:
SELECT TOP 2 WITH TIES FROM UserInfo ORDER BY CreateDate
SQL Server 2012版本引入了對OFFSET-FETCH技術的支持。OFFSET-FETCH篩選通常被視為ORDER BY子句的一部分,通常用于實現按順序分頁顯示效果。OFFSET指定要跳過的行數,FETCH指定在跳過的行數后要篩選的行數用法:
SELECT UserID, Birthday, Name,Age FROM UserInfo ORDER UserID OFFSET 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不支持的功能。
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;
到此,關于“如何使用TOP、OFFSET-FETCH、SET ROWCOUNT語句”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。