第3章 伪列:ROWNUM

原文地址:http://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm

对于查询返回的每一行,ROWNUM伪列返回一个指示Oracle从表或者联合中查询该行的顺序。第一个选择的行的ROWNUM为1,第二个为2,等等。

可以使用ROWNUM限制查询返回的行数,如下例所示:

SELECT * FROM employees WHERE ROWNUM < 11;

如果在同一个查询的ROWNUM之后存在ORDER BY子句,结果行将会重新排序。查询结果会依赖访问行的方式而不同。例如,如果ORDER BY导致Oracle使用索引访问数据,可能以不同的顺序返回数据行。因此,以下语句与上一个语句将会返回不同的结果:

SELECT * FROM employees WHERE ROWNUM < 11 ORDER BY last_name;

如果在子查询中嵌入ORDER BY子句并且将ROWNUM条件放在顶层查询中,可以使得ROWNUM在排序之后应用。例如,以下查询返回具有最小雇员编号的10个雇员。这种查询有时被称为top-N报表

SELECT * FROM

   (SELECT * FROM employees ORDER BY employee_id)

   WHERE ROWNUM < 11;

在上例中,ROWNUM的值是顶层SELECT语句中的值,因此它们在子查询中的数据行按employee_id排序之后生成。

ROWNUM大于一个正整数的条件总是返回假。例如以下查询没有数据行返回:

SELECT * FROM employees WHERE ROWNUM > 1;

获取的第一行被赋予ROWNUM值1,因此WHERE条件为假。第二行成为了第一行,并且同样被赋予了1,条件仍然为假。随后所有的行都不能满足条件,因此没有返回行。

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

UPDATE my_table SET column1 = ROWNUM;

也可以使用函数ROW_NUMBER为表的行指定唯一值。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24945919/viewspace-748017/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24945919/viewspace-748017/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值