当前位置: 首页 > 面试题库 >

如何在SQL数据库表中选择第n行?

何飞翰
2023-03-14
问题内容

我有兴趣学习一些(理想情况下)从数据库表中选择第 n 行的数据库不可知方法。看看如何使用以下数据库的本机功能实现此目标也将很有趣:

  • 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的Weblog

更新: 有关SQL标准,请参见Troels
Arvin的答案
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-09-15的3.25.0版本中添加了窗口功能支持,因此两种形式都可以在SQLite中使用。



 类似资料:
  • 问题内容: 有什么方法可以选择,例如,在T-SQL中(工作的MSSQL)表的前10行? 我想我在Oracle中看到一些定义为rownum元变量的内容,其使用方式如下 但是MSSQL呢? 问题答案: 如果为常数,则可以删除括号: (后者也适用于SQL Server 2000,而前者至少需要2005)

  • 问题内容: 我有两个表,分别名为t_master和t_detail。 t_detail表中的数据对应于主表上的记录。 t_master的数据 t_detail的数据 现在,我想进行一个查询,该查询应选择主表中的所有行,并同时选择具有最新ID(最大值)的明细,即 感谢你的帮助。谢谢。 问题答案: 使用:

  • 问题内容: 我在数据库中有一系列值需要提取以创建折线图。因为我不需要高分辨率,所以我想通过从数据库中选择第5行来对数据进行重新采样。 问题答案:

  • 问题内容: 如何在特定的文本行上选择和应用样式?类似于CSS伪元素:first-line,但是我想选择任何一行,但不仅限于第一行。 似乎不能仅使用CSS来完成…总之,我不介意JS解决方案。 更新: 好吧,实际上这只是出于兴趣。我正在尝试实现诸如突出显示段落的每个偶数行(以提高可读性,就像每个人对表行所做的事情一样)… 预格式化文本,例如: …对我来说还可以,但是如何知道在哪里拆分呢?即使给出段落的

  • 问题内容: 我有一个包含约50,000行的SQL Server表。我想随机选择大约5,000行。我想到了一种复杂的方法,用“随机数”列创建一个临时表,将我的表复制到该表中,遍历该临时表并用来更新每一行,然后从该表中选择随机数列< 0.1。我正在寻找一种更简单的方法,如果可能的话,可以在一个语句中进行说明。 本文建议使用该功能。这看起来很有希望,但是我看不到如何可靠地选择一定百分比的行。 有人做过吗

  • 如何查询我的sql server以仅获取数据库的大小? 我用了这个: 我得到了这个: 它返回我几个列,我不需要,也许有一个技巧,从这个存储过程中选择database_size列? 我还尝试了这段代码: 它给了我这个结果: 所以我写了这个: 我得到:1183 所以它是有效的,但也许有一个合适的方法来得到这个?