什么是rowID&rowNum(ROWID vs ROWNUM)

ini*_*tyk 11 sql oracle10g rowid rownum

我想知道rowID和之间的区别rowNUM

以及如何在我们的表中看到这两个.

当我执行这个:

SELECT * FROM emp WHERE rownum=1
Run Code Online (Sandbox Code Playgroud)

它返回一个查询,但是当我对rowid执行相同操作时,它说

不一致的数据类型:预期ROWID获得NUMBER

甚至在某些表中,rownum返回null.为什么这样?

请澄清一下:rowid vs rownum?(演示查询)

谢谢

编辑:需要使用别名来显示ROWIDROWNUM(因为它们是伪列),如:

SELECT rownum r1, rowid r2 FROM emp

blc*_*ird 15

rownum和rowed都是伪列.

ROWID

对于数据库中的每一行,ROWID伪列返回行的地址.

一个示例查询将是:

SELECT ROWID, last_name  
   FROM employees
   WHERE department_id = 20;
Run Code Online (Sandbox Code Playgroud)

有关rowid的更多信息,请访问:https://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns008.htm

ROWNUM

对于查询返回的每一行,ROWNUM伪列返回一个数字,表示Oracle从一个表或一组连接行中选择行的顺序.选择的第一行的ROWNUM为1,第二行的数量为2,依此类推.

您可以使用rownum限制结果量,如下所示:

SELECT * FROM employees WHERE ROWNUM < 10;
Run Code Online (Sandbox Code Playgroud)

关于rownum的更多信息:https://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm

区别

rowid和之间的实际差异rownum是,rowid是该行的永久唯一标识符.然而,rownum是暂时的.如果更改查询,则rownum编号将引用另一行,而rowid则不会.

因此ROWNUM是一个连续的数字,仅适用于特定的SQL语句.相反,ROWID是一行的唯一ID.