怎么选择 SQL 数据库表中的第 n 行?

本教程将介绍如何选择 SQL 数据库表中的第 n 行?的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

怎么选择 SQL 数据库表中的第 n 行? 教程 第1张

问题描述

我有兴趣学习一些(理想情况下)与数据库无关的从数据库表中选择第 行的方法.看看怎么使用以下数据库的本机功能来实现这一点也很有趣:

SQL 服务器

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 的博客

更新:参见 Troels Arvin 的回答关于 SQL 标准.

推荐答案

在标准的可选部分有这样做的方法,但是很多数据库都支持自己的方法.

一个非常好的讨论这个和其他事情的网站是 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 中使用.

好了关于怎么选择 SQL 数据库表中的第 n 行?的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。