对于Oracle rownum特性解释,它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推;这个伪字段可以用于限制查询返回的总行数,且rownum不能以任何表的名称作为前缀。rownum伪列是Oracle数据库中最重要的功能模块之一,因此Halo数据库在Oracle模式也已完成对它各种场景的适配,除了以上rownum解释的简单功能,我们对Oracle中rownum的功能场景扩展进行深度挖掘实现,包括rownum嵌套查询,ORDER BY 场景,层次查询,distinct场景,与非常量数字结合的表达式场景等rownum伪列可以实现的各种场景。
在说明之前,咱们先准备测试的一张基础数据表,员工表如下:
CREATE TABLE hi_emp (empno NUMERIC(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,ename VARCHAR2(10),job VARCHAR2(9),mgr NUMERIC(4),sal NUMERIC(7,2),comm NUMERIC(7,2),deptno NUMERIC(2));INSERT INTO hi_emp VALUES (7839,'KING','PRESIDENT',NULL,5000,NULL,10);INSERT INTO hi_emp VALUES (7369,'SMITH','CLERK',7902,800,NULL,20);INSERT INTO hi_emp VALUES (7499,'ALLEN','SALESMAN',7698,1600,300,30);INSERT INTO hi_emp VALUES (7521,'WARD','SALESMAN',7698,1250,500,30);INSERT INTO hi_emp VALUES (7566,'JONES','MANAGER',7839,2975,NULL,20);INSERT INTO hi_emp VALUES (7654,'MARTIN','SALESMAN',7698,1250,1400,30);INSERT INTO hi_emp VALUES (7698,'BLAKE','MANAGER',7839,2850,NULL,30);INSERT INTO hi_emp VALUES (7782,'CLARK','MANAGER',7839,2450,NULL,10);INSERT INTO hi_emp VALUES (7788,'SCOTT','ANALYST',7566,3000,NULL,20);INSERT INTO hi_emp VALUES (7844,'TURNER','SALESMAN',7698,1500,0,30);INSERT INTO hi_emp VALUES (7876,'ADAMS','CLERK',7788,1100,NULL,20);INSERT INTO hi_emp VALUES (7900,'JAMES','CLERK',7698,950,NULL,30);INSERT INTO hi_emp VALUES (7902,'FORD','ANALYST',7566,3000,NULL,20);INSERT INTO hi_emp VALUES (7934,'MILLER','CLERK',7782,1300,NULL,10);
1、rownum行编号的功能
跟oracle一样,Halo数据库系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推。如下图所示:

2、rownum用来限制查询返回的总行数
如果希望找到员工表中第一条员工的信息,可以使用rownum=1作为条件。但是想找到员工表中第二条员工的信息,使用rownum=2结果查不到数据。因为rownum都是从1开始,但是1以上的自然数在rownum做等于判断时都认为是false条件,这样就无法查到rownum = n(n>1的自然数)。如下图所示:



3、rownum不能以任何表的名称作为前缀。

4、嵌套查询rownum功能

5、与ORDER BY 结合使用

6、层次查询


7、distinct查询

8、与非常量数字结合的表达式

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




