我目前正在研究一个查询数据库 - Oracle 10g的应用程序。 在Oracle中是否有任何与我们在SQL Server中使用Top(x)相同的东西?我希望数据按顺序添加到表中。 任何帮助将不胜感激。
请注意,我不想要5个最高值。我想要5个顶级值。它是关于顺序位置的行添加到表中的物理顺序。即使按索引也没有任何排序。
答案 0 :(得分:3)
假设您正在插入具有主键递增值的数据(通过序列或日期/时间戳值),那么您可以这样做:
SELECT *
FROM (
SELECT *
FROM table_name
ORDER BY primary_key_column
)
WHERE ROWNUM <= 10;
您需要外部查询作为查询中执行的顺序:
WHERE
子句过滤器(并为匹配所有ROWNUM
子句过滤器的每一行生成WHERE
伪列); ORDER BY
子句。在单个查询中应用此选项将获得数据库中找到的前10行,然后按主键(不是您想要的那样)对这些行进行排序。使用内部查询,您可以强制首先应用ORDER BY
子句,然后在执行外部查询时随后对所需行数进行过滤。
如果您没有递增主键,那么您将不得不依赖ROWNUM
而没有任何ORDER BY
子句 - 但是,如果表启用了行移动或者您删除了一行然后插入一个不同的行(在这种情况下,数据库可能用新行填充空白空间)然后您可能会发现未按插入顺序检索行。如果你能忍受这个,那就去做:
SELECT *
FROM table_name
WHERE ROWNUM <= 10;