SQL中top关键字和limit关键字的区别

Posted

技术标签:

【中文标题】SQL中top关键字和limit关键字的区别【英文标题】:Difference between Top and Limit Keyword in SQL 【发布时间】: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,但目的相同。 【参考方案1】:

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

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

【讨论】:

SAP HANA supports TOP as well as LIMIT. 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

【讨论】:

确实如此:docs.aws.amazon.com/redshift/latest/dg/r_Examples_with_TOP.html【参考方案4】:

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

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

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

【讨论】:

这在 postgresql 中肯定不是真的 - 它不支持 TOP 语法 - 使用 LIMIT 执行 SELECT 并且只要没有 ORDER BY 子句,您将获得退出只要查询可以在逻辑上完成该限制。

以上是关于SQL中top关键字和limit关键字的区别的主要内容,如果未能解决你的问题,请参考以下文章

sql取第一条数据

sql中的limit关键字

SQL中使用关键词创建表或字段

SQL如何显示查询结果的前100条?

如何取SQL结果集的第一条记录

MySql 分页关键字(limit)