[...] OFFSET [..] FETCH [...]子句中的fetch Next和fetch First之间有什么区别?

hel*_*986 5 sql sql-server

我在AdventureWorks2016上执行了两个示例查询,并得到了相同的结果。那我什么时候应该使用NEXT或FIRST关键字呢?

select LastName + ' ' + FirstName 
from person.person
order by LastName asc OFFSET 10 rows **Fetch next** 10 rows only

select LastName + ' ' + FirstName
from person.person
order by LastName asc OFFSET 10 rows **Fetch first** 10 rows only
Run Code Online (Sandbox Code Playgroud)

Mar*_*eel 7

没有区别。SQL 标准简单地允许两者,也许可以弥合语法之间的差异,或者允许您选择编写“流利的英语”查询。

这类似于为什么标准允许您编写:

fetch first row
fetch first rows
fetch first 1 row
fetch first 1 rows
Run Code Online (Sandbox Code Playgroud)

(以及带有 的变体next),它们都将获取一行。这也让你写出语法不正确的句子,就像fetch first 2 row理所当然的那样。


Stu*_*tLC 6

FETCH FIRSTFETCH NEXT做完全一样的事情。两者之所以存在,是因为前面的OFFSET条款。使用与FIRST结合使用这个词OFFSET可能会使读者感到困惑:

SELECT * 
FROM Foo
ORDER BY ID
OFFSET 5 ROWS
FETCH FIRST 5 ROWS ONLY; -- Does this mean rows 6 to 10, or 1 to 5?
Run Code Online (Sandbox Code Playgroud)

鉴于:

SELECT * 
FROM Foo
ORDER BY ID
OFFSET 5 ROWS
FETCH NEXT 5 ROWS ONLY; -- Now it's clear!
Run Code Online (Sandbox Code Playgroud)

SqlFiddle示例在这里。