【问题标题】:Why is the LIMIT clause not supported in SQL Server?为什么 SQL Server 不支持 LIMIT 子句?
【发布时间】:2013-01-18 00:31:06
【问题描述】:

通过使用 LIMIT x,y 子句,使用 mysql 或 postgresql 很容易进行分页。 但是,Oracle 或 MSSQL 不支持它。任何关于为什么的见解?

我不是要求替代方案,我知道它们(顺便说一句,SQL-SERVER 的 TOP 函数不提供相同的功能)。我想知道是否有任何技术或许可原因,为什么 LIMIT x,y 子句对 Web 开发(分页)非常有用,并且在 MySQL 和 PostgreSQL 中具有非常干净和简单的语法,并且具有复杂的语法,有时涉及子查询, 在其他 RDBMS 中。

【问题讨论】:

  • 因为它们都实现了自己的 SQL 标准变体。这是它们之间最大的区别之一。
  • 我无法回答为什么,但您可以使用 TOP。
  • LIMIT 不是 ANSI 标准 SQL,并且该标准没有指定任何等效功能。 IIRC 它最近添加了与 PostgreSQL 相似但不完全相同的语法,但我手边没有参考。
  • 子句 LIMIT 和 OFFSET 是 PostgreSQL 特有的语法,也被 MySQL 使用。 SQL:2008 标准引入了子句 OFFSET ... FETCH {FIRST|NEXT} ... 用于相同的功能 - PostgreSQL 也支持。

标签: mysql sql sql-server oracle postgresql


【解决方案1】:

MS SQL ServerTOP (n) 子句。对于Oracle,您可以使用ROWNUM。 来自SQL Server的示例

SELECT TOP 5 * FROM Table

您也可以将它与ORDER BY clause 一起使用

SELECT TOP 5 * FROM Table ORDER BY col1

来自Oracle

SELECT * FROM Table WHERE ROWNUM <= 5

也适用于Oracle

SELECT * FROM 
(SELECT * FROM Table ORDER BY col1) A WHERE ROWNUM <= 5

【讨论】:

    猜你喜欢
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 2012-02-19
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 2011-05-26
    相关资源
    最近更新 更多