何时是使用SQL语句的正确时间“ SELECT [results] FROM [tables] WHERE [conditions] FETCH FIRST [n] ROWS ONLY”
题
我不太确定只选择一定数量的行会比简单地制作更具体的select语句更好。我有一种感觉,我错过了一些非常直接的东西,但我无法理解。我有不到6个月的任何SQL经验,这很粗略,所以我很抱歉,如果这是一个非常简单的问题,但我找不到一个明确的答案。
解决方案
我知道两种常见用途:
分页:务必指定排序。如果未指定排序,则许多db实现使用任何方便执行查询的方法。这种“最佳”的订购行为可能会产生非常不可预测的结果。
SELECT top 10 CustomerName
FROM Customer
WHERE CustomerID > 200 --start of page
ORDER BY CustomerID
子查询:可以发出子查询的许多地方要求结果是单个值。在许多情况下,前1只比最大速度快。
--give me some customer that ordered today
SELECT CustomerName
FROM Customer
WHERE CustomerID =
(
SELECT top 1 CustomerID
FROM Orders
WHERE OrderDate = @Today
)
其他提示
自定义分页,通常。
我们使用该声明的原因如下:
-
只显示最相关的结果(比如前100名),而不必将所有行从数据库传输到客户端。在这种情况下,我们也使用ORDER BY。
-
我们只想知道是否有匹配的行并且有一些示例。在这种情况下,我们不再对结果进行排序,FETCH FIRST比DB准备传输大量行然后将它们丢弃在客户端上要便宜得多。这通常是在软件开发期间需要感觉某个SQL是否正确。
醇>
如果要向用户显示值,则可能只需要N行。通常,数据库服务器可以获取前N行,比获取所有行的速度快,因此屏幕重绘速度可以快一点。
Oracle甚至有一个名为FIRST_ROWS的提示,建议快速恢复数据,这对于有效地恢复数据更为重要。
SQL的设计者同意你的看法,这就是为什么标准SQL不包括top / limit / fetch等等。
认为谷歌搜索结果和通常有结果的页数。
虽然很明显,但在他们的案例中还有更多内容,但这就是主意。
除了分页之外,任何时候你想要一个表中最多或最少[插入度量]行,按[任何度量]排序并限制为1行是IME,比使用MIN / MAX进行子查询要好。可能因发动机而异。
不隶属于 StackOverflow