oracle10g 中的 select 最高等价物是什么
what is the select top equivalent in oracle10g
我目前正在开发一个查询数据库 Oracle 10g 的应用程序。
Oracle 中是否有任何等效的东西可以得到与我们在 SQL 服务器中使用 Top(x) 相同的东西?我想要数据以便将其添加到 table。
任何帮助将不胜感激。
请注意,我不想要 5 个最高值。我想要 5 个最高值。它是关于序号位置的,行添加到 table 的物理顺序。即使按索引也没有任何排序。
假设您要插入具有主键增量值的数据(通过序列或 date/timestamp 值),那么您可以这样做:
SELECT *
FROM (
SELECT *
FROM table_name
ORDER BY primary_key_column
)
WHERE ROWNUM <= 10;
您需要外部查询,因为查询中的执行顺序是:
- 应用
WHERE
子句过滤器(并且为匹配所有 WHERE
子句过滤器的每一行生成 ROWNUM
伪列);
- 然后应用
ORDER BY
子句。
在单个查询中应用此方法将获取数据库中找到的前 10 行,然后按主键(不是您想要的)对这些行进行排序。使用内部查询,您可以强制首先应用 ORDER BY
子句,然后在执行外部查询时对所需行数进行过滤。
如果您没有递增的主键,那么您将不得不依赖 ROWNUM
而没有任何 ORDER BY
子句 - 但是,如果 table 启用了行移动或者,如果您删除一行然后插入另一行(在这种情况下,数据库可能会用新行填充空 space),那么您可能会发现行未按插入顺序检索。如果你能忍受这个,那么就这样做:
SELECT *
FROM table_name
WHERE ROWNUM <= 10;
我目前正在开发一个查询数据库 Oracle 10g 的应用程序。 Oracle 中是否有任何等效的东西可以得到与我们在 SQL 服务器中使用 Top(x) 相同的东西?我想要数据以便将其添加到 table。 任何帮助将不胜感激。
请注意,我不想要 5 个最高值。我想要 5 个最高值。它是关于序号位置的,行添加到 table 的物理顺序。即使按索引也没有任何排序。
假设您要插入具有主键增量值的数据(通过序列或 date/timestamp 值),那么您可以这样做:
SELECT *
FROM (
SELECT *
FROM table_name
ORDER BY primary_key_column
)
WHERE ROWNUM <= 10;
您需要外部查询,因为查询中的执行顺序是:
- 应用
WHERE
子句过滤器(并且为匹配所有WHERE
子句过滤器的每一行生成ROWNUM
伪列); - 然后应用
ORDER BY
子句。
在单个查询中应用此方法将获取数据库中找到的前 10 行,然后按主键(不是您想要的)对这些行进行排序。使用内部查询,您可以强制首先应用 ORDER BY
子句,然后在执行外部查询时对所需行数进行过滤。
如果您没有递增的主键,那么您将不得不依赖 ROWNUM
而没有任何 ORDER BY
子句 - 但是,如果 table 启用了行移动或者,如果您删除一行然后插入另一行(在这种情况下,数据库可能会用新行填充空 space),那么您可能会发现行未按插入顺序检索。如果你能忍受这个,那么就这样做:
SELECT *
FROM table_name
WHERE ROWNUM <= 10;