“ FETCH”和“ FETCH FIRST”之间有区别吗?

时间:2019-11-21 07:21:41

标签: sql oracle

我目前正在准备Oracle SQL考试。我有一些考试要试。一个问题如下:

哪个查询将生成所需的结果?

有两个可能的答案,我选了一个。但是根据考试,答案应该是最低的答案。

SELECT employee_id, last_name, salary
FROM employees
ORDER BY salary DESC
FETCH FIRST 5 PERCENT ROWS ONLY;

SELECT employee_id, last_name, salary
FROM employees
ORDER BY salary DESC
FETCH 5 PERCENT ROWS ONLY;

现在我想找出'FETCH''FETCH FIRST'之间的区别是什么,但是到目前为止,我没有运气来搜索它,我只发现与'FETCH NEXT'结合使用的谈论'FETCH FIRST'的页面。但是到目前为止,我要找的东西还没有运气。

有人可以向我解释'FETCH''FETCH FIRST'之间的区别是什么?而且,如果两者都正确,为什么考试会更倾向于'FETCH'而不是'FETCH FIRST'

谢谢!

3 个答案:

答案 0 :(得分:2)

有时候,最好在问之前先尝试一下。

SQL>     with basis as (select level l,100 - level lm from dual connect by level <=100)
  2      select l, lm from basis order by lm fetch first 5 percent rows only;

         L         LM
---------- ----------
   100          0
    99          1
    98          2
    97          3
    96          4

因此第一个语句起作用。

第二个:

SQL>     with basis as (select level l,  100 - level lm from dual connect by level <=100)
  2      select l, lm from basis order by lm fetch  5 percent rows only;

Error starting at line : 6 in command -  
    with basis as (select level l,  100 - level lm from dual connect by level <=100)
    select l, lm from basis order by lm fetch  5 percent rows only
Error at Command Line : 7 Column : 48
Error report -
SQL Error: ORA-00905: missing keyword
00905. 00000 -  "missing keyword"
*Cause:    
*Action:

因此错误消息指出,获取后缺少某些内容。 或a_horse指出。阅读手册。

答案 1 :(得分:1)

您的考试有误,正确的查询是第一位。

FETCH语句是PL / SQL语句,用于从多行查询的结果集中检索数据行,因此不能在SQL查询中使用: https://docs.oracle.com/cd/B12037_01/appdev.101/b10807/13_elems020.htm

FETCH(NEXT | FIRST)语句在查询中用于仅从结果中检索特定数目或行:https://docs.oracle.com/javadb/10.8.3.0/ref/rrefsqljoffsetfetch.html

答案 2 :(得分:1)

SELECT Oracle documentation包含行限制子句的语法:

SELECT row limiting clause

由此,OFFSETFETCH子句都是可选的;但是,如果包含FETCH子句,则必须在其后紧跟FIRSTNEXT关键字。

第二个查询:

SELECT employee_id, last_name, salary
FROM employees
ORDER BY salary DESC
FETCH 5 PERCENT ROWS ONLY;

语法上不正确,因为它缺少FIRST(或NEXT)关键字。