创建测试用表:
CREATE OR REPLACE VIEW V ASSELECT 'a' AS c FROM dualUNION ALLSELECT 'b' AS c FROM dualUNION ALLSELECT 'c' AS c FROM dualUNION ALLSELECT 'd' AS c FROM dualUNION ALLSELECT 'e' AS c FROM dual;SELECT * FROM v;
如果要查询前两条数据,可以使用伪列rownum来完成:
SELECT c FROM v WHERE ROWNUM < 3;
查询结果如下:
如果直接用rownum = 2来查询会出现什么情况呢?
SELECT c FROM v WHERE ROWNUM = 2;
查询结果如下:
这是因为rownum是对结果集加的一 个伪列,即先查到结果集之后再加上去的一个列 (强调:先要有结果集)。它总是从1开始排起的。所以你选出的结果不可能没有1,而有其他大于1的值。
正确的查询语句应该像下面这样,先生成序号:
SELECT c FROM (SELECT ROWNUM AS no, c FROM v) WHERE no = 2;
查询结果如下: