SQL中最高关键字和最高关键字之间的区别


75

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

SELECT TOP 2 * FROM Persons;

SELECT * FROM Persons limit 2;

我想知道以上两个查询的执行之间的区别吗?基本上,我想知道何时应使用limit关键字以及何时适合使用top关键字。此外,数据库如何根据上述两个查询返回结果。


4
AFAIK没有真正的区别。TOP是SQL Server语法,限制是MySQL语法。不同的DBMS,但目的相同。
Lieven Keersmaekers

Answers:


74

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

AFAIK目前没有产品同时支持两者。是当前实现的一个列表,另外一个(包含更多产品,但细节较少)


10

1
AWS Redshift也是如此。从...中选择前10 * 选择*从...限制100
khanna 19'Sep

Snowflake支持这两种方式
alex

1
以上大多数(如果不是全部)都不存在于2011年
Martin Smith

36

如我在上面对Martin Smith的回答的评论中所述,有些产品同时支持LIMITTOP(如您在此处看到的)。区别在于TOP仅选择前n个记录,但LIMIT允许定义偏移量以检索特定范围的记录:

SELECT * FROM ... LIMIT 5 OFFSET 10

该语句在跳过10条记录后选择了前5条记录,而使用则无法执行TOP

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


“此语句在跳过10条记录后选择了前5条记录,而TOP无法做到这一点。” -有什么方法可以以相同的方式使用top
Ralph Dingus

@RalphDingus,如果您使用的产品/版本不支持偏移量,则嵌套TOP ... FETCH或类似产品
Martin Smith,


13

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


5

没有区别。在TOPLIMIT关键字相同的功能,并且将返回相同的事情。


-7

一个大错误是,LIMIT是缓慢的,因为select返回完整,然后数据库服务器仅返回有限的数据。可能时使用TOP。


3
这在postgresql中肯定是不正确的-无论如何它都不支持TOP语法-用LIMIT进行SELECT,只要没有ORDER BY子句,查询在逻辑上可以完成时就会退出这个限制。
Transact Charlie
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.