mysql - 如何选择SQL数据库表中的第n行?

标签 mysql sql database oracle postgresql

我有兴趣学习一些(理想情况下)与数据库无关的方法来从数据库表中选择第 n 行。了解如何使用以下数据库的 native 功能来实现这一点也很有趣:

  • SQL Server
  • MySQL
  • PostgreSQL
  • SQLite
  • 甲骨文

我目前正在 SQL Server 2005 中执行以下操作,但我有兴趣了解其他人的更不可知的方法:

WITH Ordered AS (
SELECT ROW_NUMBER() OVER (ORDER BY OrderID) AS RowNumber, OrderID, OrderDate
FROM Orders)
SELECT *
FROM Ordered
WHERE RowNumber = 1000000

上述 SQL 的功劳:Firoz Ansari's Weblog

更新:请参阅 Troels Arvin's answer关于 SQL 标准。 Troels,您有我们可以引用的链接吗?

最佳答案

标准的可选部分有多种方法可以做到这一点,但很多数据库都支持自己的方式。

一个谈论这个和其他事情的非常好的网站是 http://troels.arvin.dk/db/rdbms/#select-limit .

基本上,PostgreSQL和MySQL支持非标准:

SELECT...
LIMIT y OFFSET x 

Oracle、DB2 和 MSSQL 支持标准窗口函数:

SELECT * FROM (
  SELECT
    ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber,
    columns
  FROM tablename
) AS foo
WHERE rownumber <= n

(我只是从上面链接的网站复制的,因为我从未使用过这些数据库)

更新:从 PostgreSQL 8.4 开始,支持标准窗口函数,因此预计第二个示例也适用于 PostgreSQL。

更新: SQLite 在 2018 年 9 月 15 日的 3.25.0 版本中添加了窗口函数支持,因此这两种形式也可以在 SQLite 中使用。

关于mysql - 如何选择SQL数据库表中的第n行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46158924/

相关文章:

php - 使用 PHP 和 MySQL 从多个表中选择一个唯一 ID 的信息

sql - 写函数时PostgreSQL sql函数语法错误

sql - plsql错误无效号码

SQL Server - 架构/代码分析规则 - 您的规则将包括哪些内容?

c# - 如何使用 .Net 使用 MVC 和 Entity Framework 在表中动态添加数据库字段?

sql - 如何从 PostgresQL 中的 MAX() 聚合函数获取两个值

mysql - 使用两个表的主键的外键关系

php - 通过 PHP POST 方法获取 elRTE 内容

php - 使用 PDO 替代 mysql_num_rows

database - 表格中的引用