Sql 在oracle中使用rownum获取数据
我在oracle中有一个查询,使用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
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的问题。