我在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)
没有区别。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
理所当然的那样。
FETCH FIRST
并FETCH 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示例在这里。
归档时间: |
|
查看次数: |
2667 次 |
最近记录: |