编写SQL查询以从ORACLE数据库中的表中检索第三行

时间:2014-07-19 19:49:03

标签: sql oracle

编写SQL查询以从表中检索第三行,假设表名为emp 其实我想了解rownum概念

Select * from 
 (select rownum r ,e.* from emp e ) 
 where r = 3 ; 

并且效果很好

一旦我尝试这个

select * from 
( select rownum , e.* from emp e ) 
where rownum = 3 ; 

我得到了我的输出:no data found

请你解释一下,提前致谢

3 个答案:

答案 0 :(得分:1)

首先,不需要在内部查询中包含rownum。来自Oracle documentation for ROWNUM一小段摘录

  

测试ROWNUM值大于正整数的条件   总是假的。例如,此查询不返回任何行:

SELECT * FROM employees
    WHERE ROWNUM > 1;
  

为获取的第一行分配一个ROWNUM为1并生成   条件错误。要获取的第二行现在是第一行和   也被赋予ROWNUM为1并使条件为假。所有行   随后无法满足条件,因此不返回任何行。

我相信,对于你的情况也是如此,条件WHERE ROWNUM = 3也是如此。

为获取的第一行分配ROWNUM为1并使条件为false导致1 != 3。要获取的第二行现在是第一行,并且还被指定为ROWNUM为1并使条件为false导致1 != 3等等...

为此目的,建议使用ROW_NUMBER

答案 1 :(得分:0)

Actually i want to understand rownum concept

每个查询都有自己的rownum。 ROWNUM不是从内部查询传播到外部的真实列。 ROWNUM是每个查询的伪列,仅在该查询范围内有效。内部rownum是rownum.1,外部rownum是rownum.2,它们不相同,所以你要处理2个单独的列。我有3个查询,嵌套,你会有3个rownums。外部ROWNUM遮蔽内部ROWNUM。要将ROWNUM从内部子查询传递到外部查询,您需要将列别名为伪列以外的其他内容,否则该列将被重新定义"每个外部查询。

您的查询可以被视为:

select rownum, subquery.sub_rownum, subquery.empno from 
( select rownum as sub_rownum, e.* from emp e ) subquery
where subquery.sub_rownum = 3 
;

注意现在有2" rownum"列。内部rownum由其别名sub_rownum显示为外部查询的真实列。注意在外部查询中再次使用rownum。它们是两个不同的变量。注意值1和3.外部的ROWNUM = 1,因为它是外部结果集中的第1行。 SUB_ROWNUM = 3,因为它是内部结果集中的第3个结果,并且由于您对其进行了别名,它可以存活为真正的列。

    ROWNUM SUB_ROWNUM      EMPNO
---------- ---------- ----------
         1          3       7521

答案 2 :(得分:-1)

对于SQL Server: SELECT * FROM (     选择     ROW_NUMBER()OVER(ORDER BY id)AS RowNumber,e。*      来自dbo.tbl_emp e )演示 在哪里demo.RowNumber = 3