rowid和rownum的区别

简介: rowid和rownum都是序列,但含义完全不同。rowid是物理地址,用于定位oracle中具体数据的物理存储位置,rownum则是sql的输出结果排序。通俗的讲:rowid是相对不变的,rownum会变化,尤其是使用order by的时候rowid:用于定位数据表...
rowid和rownum都是序列,但含义完全不同。rowid是物理地址,用于定位oracle中具体数据的物理存储位置,rownum则是sql的输出结果排序。通俗的讲:rowid是相对不变的,rownum会变化,尤其是使用order by的时候
rowid:用于定位数据表中某条数据的位置,是唯一的,也不会改变
rownum表示查询某条记录在整个结果集中的位置,同一条记录查询条件不同对应的rownum是不同的而rowid是不会变的

rowid:
SQL> select * from cheng1;

NAME          ID
----- ----------
eeee          28
nnnn           1
cccc            1
aaaa          30

SQL> select rowid,name,id from cheng1;

ROWID              NAME          ID
------------------ ----- ----------
AAAXmlAABAAAO5iAAA eeee          28
AAAXmlAABAAAO5iAAD nnnn           1
AAAXmlAABAAAO5iAAE cccc           1
AAAXmlAABAAAO5iAAF aaaa          30

SQL> select name,id from cheng1 where rowid='AAAXmlAABAAAO5iAAE';

NAME          ID
----- ----------
cccc           1

SQL> select name,id from cheng1 where rowid='AAAXmlAABAAAO5iAAA';

NAME          ID
----- ----------
eeee          28

rownum:在oracle中,要按特定条件查询前n条记录,用rownum就可以了。select * from cheng1 where rownum<3;这里要注意的是不能对rownum用''>'',也就是说如果
用select * from cheng1 where rownum>3;查询的结果是失败的。

SQL> select rownum,name,id from  cheng1;


    ROWNUM NAME          ID
---------- ----- ----------
         1 eeee          28
         2 ffff           1
         3 aaaa          30

SQL> select * from cheng1 where rownum<3;


NAME          ID
----- ----------
eeee          28
ffff           1

SQL> select * from cheng1 where rownum>2;

no rows selected

对应rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,以此内推,这个伪字段可以用于限制查询返回的总行数,
因为rownum都是从1开始,但是1以上的自然数在rownum做判断时认为都是false条件,所有无法查到rownum=n(n>1的自然数)。
rownum对应大于某值的查询条件,如果想找从第二行记录以后的记录,当使用rownum>2是查不出记录的,原因是由于rownum是一个总是从1开始的伪劣,oracle认为
rownum>n(n>1的自然数)这种条件不成立,所以查不到 SQL> select * from cheng1 where rownum>2;
那如何才能找到第二行以后的记录。可以使用以下的子查询方法来决解。注意子查询中的rownum必须有别名,否则还是不会查出记录来,这是因为rownum不是某个
的列,如果不起别名的话,无法知道rownum是子查询还是主查询的列。
SQL> select * from (select rownum no,name,id from cheng1) where no>2;

        NO NAME          ID
---------- ----- ----------
         3 aaaa          30
rownum对于小于某值的查询条件如果想找到第三条记录以前的记录,当使用rownum<3是能得到2条记录的。显然rownum对于rownum1的自然数)的条件认为是成
立的所有可以找到记录。综上几种情况,可能有时候需要查询rownum在某区间的数据,哪怎么办,从上可以看出rownum对小于谋值的查询条件是人为true的,rownum
对大于某值的查询条件直接认为是false的,但是可以间接的让它转为认为是true的。那就必须使用

子查询。
列于查询第1条到第3条中间的记录:
SQL> select * from (select rownum nn,name,id from cheng1 where rownum<3) where nn>1;

       NN NAME          ID
---------- ----- ----------
         2 ffff           1
 






    






相关文章
|
运维 数据挖掘 数据库
服务器数据恢复-服务器raid5硬盘指示灯变红的数据恢复案例
一台服务器上3块磁盘组建了一组raid5磁盘阵列。服务器运行过程中有一块硬盘的指示灯变为红色,raid5磁盘阵列出现故障,服务器上层操作系统的分区无法识别。
服务器数据恢复-服务器raid5硬盘指示灯变红的数据恢复案例
uniapp导航栏组件如何使用
uniapp导航栏组件如何使用
341 0
|
存储 机器学习/深度学习 人工智能
《探秘人工智能与鸿蒙系统集成开发的硬件基石》
在人工智能与鸿蒙系统集成开发中,硬件配置是关键基础。处理器(如英特尔i5+)提供强大算力支持模型训练与推理;内存(建议16GB+)确保数据高效流转,避免性能瓶颈;存储选用SSD加速数据读写;GPU(如NVIDIA RTX系列)通过并行计算显著缩短训练时间。此外,网络、电源和传感器等其他硬件也影响整体效率。合理选择硬件组合,可为开发提供坚实保障,推动智能设备生态的创新与发展。
327 0
《探秘人工智能与鸿蒙系统集成开发的硬件基石》
|
人工智能 5G 定位技术
如何使用基站查询API帮你解析地理位置?
随着“新基建”战略推进,我国已建成全球领先的移动通信网络。基于基站数据的LBS定位服务成为各行业数字化转型的重要工具。探数平台基站查询API整合三大运营商数据,提供高精度、低延迟的地理位置查询服务,广泛应用于位置推荐、物流追踪等领域。本文详细介绍该API的核心功能、返回字段及调用流程,并通过Python示例展示使用方法。未来,随着5G和AI技术发展,基站定位将迈向厘米级精度,赋能自动驾驶、工业物联网等前沿领域,助力开发者抢占位置经济的战略高地。
3820 1
|
程序员 C语言 C++
C语言中的goto语句:使用、争议与最佳实践
C语言中的goto语句:使用、争议与最佳实践
1505 1
|
存储 Python
数据包络分析(Data Envelopment Analysis, DEA)详解与Python代码示例
数据包络分析(Data Envelopment Analysis, DEA)详解与Python代码示例
|
NoSQL Linux Redis
在CentOS上安装和配置Redis
在CentOS上安装和配置Redis
3426 3
|
开发框架 JavaScript 前端开发
网页三维CAD参数化建模开发框架的搭建教程
mxcad3d是基于mxdraw的基础上,使用TypeScript和C++语言开发的一个网页三维CAD参数化建模框架,我们为开发者提供了丰富的参数化建模的开发接口,用户可以高效、便捷的对基本图元进行创建、同时丰富的JS开发接口方便了用户实现复杂的模型创建和CAD二次开发
|
并行计算 编译器 程序员
提升C/C++编程效率:深入C/C++ for循环的优化与应用
提升C/C++编程效率:深入C/C++ for循环的优化与应用
2183 0
520专属——使用Python代码表白究竟能不能成功?
520,谐音:“我爱你”,一直觉得,520真正的意义,不单是用于表达爱,也不是为了收礼物和红包,而是提醒我们,不要忘记爱与被爱。 废话不多说,下面整理了9个效果图和参考代码,感兴趣的朋友可以看看