Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在oracle中使用rownum获取数据_Sql_Oracle - Fatal编程技术网

Sql 在oracle中使用rownum获取数据

Sql 在oracle中使用rownum获取数据,sql,oracle,Sql,Oracle,我在oracle中有一个查询,使用rownum从表中获取数据,但我没有得到任何数据。 我的问题是这样的: select*from table name,其中rownum语法对我来说似乎正确 但是,ROWNUM是在结果行上计算的,例如: SELECT * FROM TABLE_NAME WHERE ROWNUM < 10 ORDER BY TABLE_FIELD ASC; 从表名称中选择*,其中ROWNUM

我在oracle中有一个查询,使用
rownum
从表中获取数据,但我没有得到任何数据。
我的问题是这样的:


select*from table name,其中rownum语法对我来说似乎正确

但是,ROWNUM是在结果行上计算的,例如:

SELECT * FROM TABLE_NAME WHERE ROWNUM < 10 ORDER BY TABLE_FIELD ASC;
从表名称中选择*,其中ROWNUM<10按表字段ASC排序;

从表格名称中选择*,其中ROWNUM<10按表格字段描述排序;
会给你不同的结果

每次执行查询时,对于每个元组,Oracle都会为该唯一查询分配一个范围为scope的ROWNUM


你想完成什么?

语法对我来说似乎是正确的

但是,ROWNUM是在结果行上计算的,例如:

SELECT * FROM TABLE_NAME WHERE ROWNUM < 10 ORDER BY TABLE_FIELD ASC;
从表名称中选择*,其中ROWNUM<10按表字段ASC排序;

从表格名称中选择*,其中ROWNUM<10按表格字段描述排序;
会给你不同的结果

每次执行查询时,对于每个元组,Oracle都会为该唯一查询分配一个范围为scope的ROWNUM


您想实现什么?

rownum是一个伪列,在应用where子句之后,它对结果集中的行进行计数

  SELECT table_name
    FROM user_tables
    WHERE rownum > 2;
TABLE_NAME                     
------------------------------

0 rows selected
但是,无论表中有多少行,此查询始终返回零行

为了解释这种行为,我们需要了解Oracle是如何处理ROWNUM的。将ROWNUM指定给行时,Oracle从1开始,仅在选择行时增加值;也就是说,当满足WHERE子句中的所有条件时。因为我们的条件要求ROWNUM大于2,所以不会选择任何行,并且ROWNUM的增量永远不会超过1

已编辑

我在网站上找到了这一段,哪个更好

测试大于正整数的ROWNUM值的条件始终为false。例如,此查询不返回任何行:

SELECT * FROM employees
    WHERE ROWNUM > 1;
获取的第一行被指定为ROWNUM 1,并使条件为false。要获取的第二行现在是第一行,并且也被分配了ROWNUM 1,并使条件为false。所有行随后都无法满足条件,因此不会返回任何行


您还可以使用ROWNUM为表中的每一行指定唯一的值,如本例所示:

ROWNUM是一个伪列,在应用where子句后对结果集中的行进行计数

  SELECT table_name
    FROM user_tables
    WHERE rownum > 2;
TABLE_NAME                     
------------------------------

0 rows selected
但是,无论表中有多少行,此查询始终返回零行

为了解释这种行为,我们需要了解Oracle是如何处理ROWNUM的。将ROWNUM指定给行时,Oracle从1开始,仅在选择行时增加值;也就是说,当满足WHERE子句中的所有条件时。因为我们的条件要求ROWNUM大于2,所以不会选择任何行,并且ROWNUM的增量永远不会超过1

已编辑

我在网站上找到了这一段,哪个更好

测试大于正整数的ROWNUM值的条件始终为false。例如,此查询不返回任何行:

SELECT * FROM employees
    WHERE ROWNUM > 1;
获取的第一行被指定为ROWNUM 1,并使条件为false。要获取的第二行现在是第一行,并且也被分配了ROWNUM 1,并使条件为false。所有行随后都无法满足条件,因此不会返回任何行


您还可以使用ROWNUM为表的每一行分配唯一的值,如本例所示:

由于rahularyansharma提到的原因,基于ROWNUM的查询并不总是按照您预期的方式运行,解决此问题的方法是

SELECT * from (SELECT rownum AS rn, TABLE_NAME.* FROM TABLE_NAME)
where rn > 5;

但是,请注意,在对大型数据集进行操作时,这将是一个相当低效的操作。

因为rahularyansharma提到的原因,基于rownum的查询并不总是按照您预期的方式运行,解决这一问题的方法是

SELECT * from (SELECT rownum AS rn, TABLE_NAME.* FROM TABLE_NAME)
where rn > 5;

但是,请注意,在对大型数据集进行操作时,这将是一个相当低效的操作。

在这里使用Oracle 10g可以正常工作,请注意,尽管您无法控制返回哪4行。…警告:
ROWNUM
不是表的伪列,这是结果集的伪序列。请使用order by来保证一致性此处使用Oracle 10g可以正常工作,请注意,尽管您无法控制返回哪4行……警告:
ROWNUM
不是表的伪列,这是一个结果集的伪序列。请使用order by来保证答案的一致性等级…但我正在尝试在oracle中查找此行为背后的原因..感谢您的回答…但我正在尝试在oracle中查找此行为背后的原因..虽然正确,但这似乎无法回答有关ROWNUM<5的问题,不是ROWNUM>5。虽然这是正确的,但似乎并没有回答关于ROWNUM<5而不是ROWNUM>5的问题。