Snowflake中SELECT TOP与SELECT ... LIMIT语句的区别是什么
SELECT TOP n 与 LIMIT n 的区别
很多人在不指定排序规则的场景下测试二者,会发现返回结果完全一致,比如Snowflake环境下的测试用例如下:
SELECT TOP 5 C_ACCTBAL FROM "SNOWFLAKE_SAMPLE_DATA"."TPCH_SF1"."CUSTOMER"; SELECT C_ACCTBAL FROM "SNOWFLAKE_SAMPLE_DATA"."TPCH_SF1"."CUSTOMER" LIMIT 5;
两次查询返回的结果完全相同:
C_ACCTBAL 711.56 121.65 7498.12 2866.83 794.47
但二者本质上是不同数据库支持的方言语法,核心区别如下:
- 支持的数据库生态不同
TOP是SQL Server、Access、早期Sybase等数据库支持的非标准语法,LIMIT是MySQL、PostgreSQL、SQLite、Snowflake等数据库支持的非标准语法,二者都不属于ANSI SQL标准,ANSI SQL中定义的标准分页语法是FETCH FIRST n ROWS ONLY。 - 语法位置不同
TOP必须紧跟在SELECT关键字之后,写在查询字段的前面;LIMIT要放在整个查询语句的末尾,排序子句ORDER BY的后面。 - 扩展功能支持不同
TOP支持百分比查询和并列结果返回:可以写TOP 10 PERCENT返回前10%的行,也可以写TOP 5 WITH TIES将和第5行排序字段值相同的行都返回,这两个能力LIMIT原生不支持,需要额外写逻辑实现。 - 额外注意:不管用
TOP还是LIMIT,如果语句中没有加ORDER BY指定排序规则,返回的行都是数据库扫描过程中最先命中的行,结果不具备确定性,同一个查询多次执行返回结果不同是正常情况。
内容的提问来源于stack exchange,提问作者LeelaSella
相关产品推荐
相关产品推荐

