这3个查询返回相同的结果集,但使用2种不同的技术。使用一个相对于另一个有优势吗?计划和执行时间在相同的成本范围内。
Select *
from user_tab_columns
order by data_length desc,table_name, column_name
fetch first 5 rows only
Select *
from user_tab_columns
order by data_length desc,table_name, column_name
fetch next 5 rows only
select *
from (
Select *
from user_tab_columns
order by data_length desc,table_name, column_name
)
where rownum <=5
答案 0 :(得分:1)
在first
子句中使用的关键字next
和fetch
是彼此的完美替代,它们可以互换使用-在文档中有明确说明。因此,您实际上只有两个查询,而不是三个。 (前两个是完全相同的。)
第一个查询比最后一个查询容易编写和维护。另一方面,它仅在Oracle 12.1和更高版本中可用。在Oracle 11.2和更早版本中,唯一的选择是您的最后一个查询。
fetch
子句更加灵活,例如,它允许您指定with ties
(如果将具有rownum 4、5、6和7的行绑在{{ 1}}标准)。