我目前正在准备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'?
?谢谢!
答案 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包含行限制子句的语法:
由此,OFFSET
和FETCH
子句都是可选的;但是,如果包含FETCH
子句,则必须在其后紧跟FIRST
或NEXT
关键字。
第二个查询:
SELECT employee_id, last_name, salary
FROM employees
ORDER BY salary DESC
FETCH 5 PERCENT ROWS ONLY;
语法上不正确,因为它缺少FIRST
(或NEXT
)关键字。