【问题标题】:Difference between Top and Limit Keyword in SQLSQL中top关键字和limit关键字的区别
【发布时间】:2021-11-29 19:09:56
【问题描述】:

一个快速的问题。假设我有以下两个查询:

SELECT TOP 2 * FROM Persons;

SELECT * FROM Persons limit 2;

我想知道上面两个查询的执行有什么区别? 基本上,我想知道什么时候应该使用limit 关键字,什么时候适合使用top 关键字。 另外,数据库是如何根据上述2个查询返回结果的。

【问题讨论】:

  • AFAIK 没有真正的区别。 TOP 是 SQL Server 语法,limit 是 MySQL 语法。不同的 DBMS,但目的相同。

标签: sql


【解决方案1】:

如果您使用的是 SQL Server,请使用 TOP 如果您使用的是 MySQLPostgres,请使用 Limit

AFAIK 目前没有同时支持两者的产品。 Here's one 当前实现的列表和here's another(涵盖更多产品但不太详细)

【讨论】:

  • AWS Redshift 也是如此。从 ... 中选择前 10 个 *; select * from ... 限制 100
  • Snowflake 两者都支持
  • 以上大部分(如果不是全部)在 2011 年都不存在
【解决方案2】:

正如我在上面对 Martin Smith 回答的评论中所述,有些产品同时支持 LIMITTOP(如您所见 here)。不同的是TOP只选择前n条记录,而LIMIT允许定义偏移量来检索特定范围的记录:

SELECT * FROM ... LIMIT 5 OFFSET 10

此语句在跳过 10 条记录后选择前 5 条记录,这对于 TOP 是不可能的。

我发布的示例仅针对我上面链接的 DBS 进行了检查。由于时间不够,我没有检查 SQL 标准。

【讨论】:

  • "此语句在跳过 10 条记录后选择前 5 条记录,这在 TOP 中是不可能的。" - 有什么方法可以以同样的方式使用 top
  • @RalphDingus 嵌套 TOP 如果您使用的产品/版本不支持 OFFSET ... FETCH 或类似的
【解决方案3】:

TOP 和 LIMIT 都适用于亚马逊 Redshift

【解决方案4】:

limit 适用于 MySQL 和 PostgreSQL,top 适用于 SQL Server,rownum 适用于 Oracle。

【讨论】:

    【解决方案5】:

    没有区别。 TOPLIMIT 关键字功能相同,并且返回相同的内容。

    【讨论】:

      【解决方案6】:

      一个大错误,LIMIT 很慢,因为选择返回完整,然后数据库服务器只返回有限的数据。当它可能用于 TOP 时。

      【讨论】:

      • 这在 postgresql 中肯定不是真的 - 它不支持 TOP 语法 - 使用 LIMIT 执行 SELECT 并且只要没有 ORDER BY 子句,您将获得退出只要查询可以在逻辑上完成该限制。
      猜你喜欢
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      相关资源
      最近更新 更多