对oracle的rownum 与用法

Oracle中的rownum用来显示行号

SELECT ROWNUM , TBLACADEMY.*

from TBLACADEMY

返回的结果如下所示:

对oracle的rownum 与用法_第1张图片

需要注意一点是 如果直接写

SELECTROWNUM , *

fromTBLACADEMY

将会报错:missing expression 原因是ROWNUM不属于任何的列,如果要查出其他信息必须要与表的标识。

而按照rownum进行筛选时候如果

SELECTROWNUM  ,TBLACADEMY.*

fromTBLACADEMY

whereROWNUM>1

将会导致无数据查出,原因是ROWNUM总是一个从1开始的自然数,在执行上述语句时候,rownum=1 当第一次判断时候,rownum不大于1 返回false所以无结果。

想要使用rownum进行筛选必须要使用别名,且使用嵌套子查询,否则还是不会查出记录来,这是因为rownum不是某个表的列,如果不起别名的话,无法知道rownum是子查询的列还是主查询的列。

子查询(标红部分)相当于一个表,下列方式子表不起别名

SELECT*from (

SELECT ROWNUM  rn,TBLACADEMY.*

from TBLACADEMY

) where    rn>'5'

下列方式 字表起别名

SELECT*from (

SELECTROWNUM  rn,TBLACADEMY.*

fromTBLACADEMY

)a where a.rn>'5'

上述两种方式产生的结果如下图

对oracle的rownum 与用法_第2张图片

数据库操作

SELECT distinct SYS_ROLE_PERMISSION.PERMISSION_ID
from 
SYS_USER inner join SYS_USER_ROLE
on SYS_USER."ID"=SYS_USER_ROLE.USER_ID INNER join SYS_ROLE
on SYS_USER_ROLE.ROLE_ID=SYS_ROLE."ID" INNER join SYS_ROLE_PERMISSION 
on SYS_ROLE."ID"=SYS_ROLE_PERMISSION.ROLE_ID

where SYS_USER.USERNAME='000005'


关联关系
SELECT SYS_USER.*,SYS_USER_ROLE.*
from SYS_USER,SYS_USER_ROLE
where SYS_USER."ID"=SYS_USER_ROLE.USER_ID


查询重复字段
select SYS_USER.* from SYS_USER right join (
select SYS_USER."ID" From SYS_USER Group by ID having Count(ID) > 1 ) T on SYS_USER."ID" = T."ID"

查询所有sequence的当前所在位置
select SYS_USER_SEQ.nextval from dual;

CREATE SEQUENCE seq_itv_collection
            INCREMENT BY 1  -- 每次加几个  
            START WITH 1400       -- 从1开始计数  
            NOMAXVALUE        -- 不设置最大值  
            NOCYCLE               -- 一直累加,不循环  
            CACHE 10; 


你可能感兴趣的:(对oracle的rownum 与用法)