什么是oracle10g中的select top等价物

时间:2016-05-11 18:35:48

标签: sql oracle oracle10g

我目前正在研究一个查询数据库 - Oracle 10g的应用程序。 在Oracle中是否有任何与我们在SQL Server中使用Top(x)相同的东西?我希望数据按顺序添加到表中。 任何帮助将不胜感激。

请注意,我不想要5个最高值。我想要5个顶级值。它是关于顺序位置的行添加到表中的物理顺序。即使按索引也没有任何排序。

1 个答案:

答案 0 :(得分:3)

假设您正在插入具有主键递增值的数据(通过序列或日期/时间戳值),那么您可以这样做:

SELECT *
FROM   (
  SELECT *
  FROM   table_name
  ORDER BY primary_key_column
)
WHERE ROWNUM <= 10;

您需要外部查询作为查询中执行的顺序:

  1. 应用WHERE子句过滤器(并为匹配所有ROWNUM子句过滤器的每一行生成WHERE伪列);
  2. 然后应用ORDER BY子句。
  3. 在单个查询中应用此选项将获得数据库中找到的前10行,然后按主键(不是您想要的那样)对这些行进行排序。使用内部查询,您可以强制首先应用ORDER BY子句,然后在执行外部查询时随后对所需行数进行过滤。

    如果您没有递增主键,那么您将不得不依赖ROWNUM而没有任何ORDER BY子句 - 但是,如果表启用了行移动或者您删除了一行然后插入一个不同的行(在这种情况下,数据库可能用新行填充空白空间)然后您可能会发现未按插入顺序检索行。如果你能忍受这个,那就去做:

    SELECT *
    FROM   table_name
    WHERE  ROWNUM <= 10;