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

时间:2018-06-01 12:02:44

标签: 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

2 个答案:

答案 0 :(得分:3)

FETCH FIRSTFETCH NEXT做同样的事情。之所以存在,是因为前面的OFFSET子句。使用FIRSTOFFSET这两个词可能让人类读者感到困惑:

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?

鉴于:

SELECT * 
FROM Foo
ORDER BY ID
OFFSET 5 ROWS
FETCH NEXT 5 ROWS ONLY; -- Now it's clear!

SqlFiddle example此处。

答案 1 :(得分:2)

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

这类似于标准允许你写的原因:

fetch first row
fetch first rows
fetch first 1 row
fetch first 1 rows

(以及next的变体)将获取单行。这也允许你写出语法不正确的句子,如fetch first 2 row被视为理所当然。