Oracle数据库表中的伪列
##rownum
对于rownum来说它是oracle系统顺序分配为从查询返回行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且rownum不能以任何表的名称作为前缀。
- rownum 对于等于某值的查询条件
如果希望找到学生表中第一条学生的信息,可以使用rownum=1作为条件。但是想找到学生表中第二条学生的信息,使用rownum=2结果查不到数据。
因为rownum都是从1开始,但是1以上的自然数在rownum做等于判断是时认为都是false条件,所以无法查到rownum = n(n>1的自然数)。
SQL> select rownum,id,name from student where rownum=1;(可以用在限制返回记录条数的地方,保证不出错,如隐式游标)
SQL> select rownum,id,name from student where rownum =2;(没有返回结果)
2)rownum对于大于某值的查询条件
如果想找到从第二行记录以后的记录,当使用rownum>2是查不出记录的,原因是由于rownum是一个总是从1开始的伪列,Oracle 认为rownum> n(n>1的自然数)这种条件依旧不成立,所以查不到记录。
select * from tb_users where rownum>0; 所有数据输出
select * from tb_users where rownum>1; 没有输出
如果需要获取第2到第5行的数据,则可以先将rownum转换为具体的列再进行使用
select * from
(select rownum rn,u.* from tb_users u)
where rn>=2 and rn<=5
三段式分页写法— 公式
select * from (
(select rownum rn,u.* from
(核心查询) u
where rownum<=(页码值*每页行数)) -- 剔除后续多余的数据
) where rn>(页码值-1)*每页行数 -- 剔除前面多余的数据
每页3行,获取第2页数据
SQL> select * from (select rownum rn,u.* from tB_users u where rownum<=6) where rn>3;
rowid
oracle数据库的表中的每一行数据都有一个唯一的标识符,或者称为rowid,在oracle内部通常就是使用它来访问数据的。rowid需要 10个字节的存储空间,并用18个字符来显示。该值表明了该行在oracle数据库中的物理具体位置。可以在一个查询中使用rowid来表明查询结果中包含该值。