何时是使用SQL语句的正确时间“ SELECT [results] FROM [tables] WHERE [conditions] FETCH FIRST [n] ROWS ONLY”

StackOverflow https://stackoverflow.com/questions/400575

  •  03-07-2019
  •  | 
  •  

我不太确定只选择一定数量的行会比简单地制作更具体的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
)

其他提示

自定义分页,通常。

我们使用该声明的原因如下:

  1. 只显示最相关的结果(比如前100名),而不必将所有行从数据库传输到客户端。在这种情况下,我们也使用ORDER BY。

  2. 我们只想知道是否有匹配的行并且有一些示例。在这种情况下,我们不再对结果进行排序,FETCH FIRST比DB准备传输大量行然后将它们丢弃在客户端上要便宜得多。这通常是在软件开发期间需要感觉某个SQL是否正确。

如果要向用户显示值,则可能只需要N行。通常,数据库服务器可以获取前N行,比获取所有行的速度快,因此屏幕重绘速度可以快一点。

Oracle甚至有一个名为FIRST_ROWS的提示,建议快速恢复数据,这对于有效地恢复数据更为重要。

SQL的设计者同意你的看法,这就是为什么标准SQL不包括top / limit / fetch等等。

认为谷歌搜索结果和通常有结果的页数。

虽然很明显,但在他们的案例中还有更多内容,但这就是主意。

除了分页之外,任何时候你想要一个表中最多或最少[插入度量]行,按[任何度量]排序并限制为1行是IME,比使用MIN / MAX进行子查询要好。可能因发动机而异。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top