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
如果您使用的是 MySQL
或 Postgres
,请使用 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 回答的评论中所述,有些产品同时支持 LIMIT
和 TOP
(如您所见 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】:没有区别。 TOP
和 LIMIT
关键字功能相同,并且返回相同的内容。
【讨论】:
【参考方案6】:一个大错误,LIMIT 很慢,因为选择返回完整,然后数据库服务器只返回有限的数据。当它可能用于 TOP 时。
【讨论】:
这在 postgresql 中肯定不是真的 - 它不支持 TOP 语法 - 使用 LIMIT 执行 SELECT 并且只要没有 ORDER BY 子句,您将获得退出只要查询可以在逻辑上完成该限制。以上是关于SQL中top关键字和limit关键字的区别的主要内容,如果未能解决你的问题,请参考以下文章