Oracle数据库-------------------------------数据伪列ROWNUM

关于Oracle数据库的学习记录:

二十六、数据伪列ROWNUM
在之前实际上已经使用过了SYSDATE这个数据伪列,但是在Oracle里面提供了很多的伪列,其中最重要的两个是ROWNUM、ROWID

1.行号:ROWNUM(核心)
在进行数据查询的时候,默认情况下只是显示了数据表中结构的内容,但是也可以利用ROWNUM针对于显示的数据进行一个自动的行号编号
范例:观察ROWNUM
SELECT ROWNUM,empno,ename,job FROM emp;
发现ROWNUM不属于emp表的数据列,但是由于是伪列,所以可以使用。发现ROWNUM是针对于每一行记录进行了一个自动的编号,但是必须强调的是,这个自动编号是动态生成的,不是固定的
范例:再一次观察
SELECT ROWNUM,empno,ename,job FROM emp WHERE deptno=10;
所有的ROWNUM的操作不是固定的,都是查询的时候一行行自动处理。在Oracle之中,ROWNUM可以做以下两件事情:
**取出第一行记录
**取出前N行记录
范例:查询emp表的第一行记录
SELECT * FROM emp WHERE ROWNUM=1;
如果现在换了任何一个数字,都不能够显示;能够取出第一行的数据对数据的分析人员是很有帮助的
在使用ROWNUM操作的过程之中,取出前N行数据是最有用处的一种
范例:取出emp表的第5行记录
SELECT * FROM emp WHERE ROWNUM<=5;
范例:取出emp表的前10行记录
SELECT * FROM emp WHERE ROWNUM<=10;
但是发现取前几行的记录似乎意义不大,只想取出6-10条记录
ROWNUM只能够使用基本的关系
应该采用如下思路完成:
**取出前10条记录,而后此查询返回多行多列,可以在FROM子句里面使用子查询
**针对于子查询的数据再取出后5条
第一步:查询前10条记录
SELECT empno,ename,job,sal,hiredate,ROWNUM rn FROM emp WHERE ROWNUM<=10;
第二步:以上的查询返回多行多列,可以在FROM子句之中使用,那么此时,rn就作为一列出现了,可以继续使用WHERE子句进行限定
SELECT *
FROM (
      SELECT empno,ename,job,sal,hiredate,ROWNUM rn FROM emp
      WHERE ROWNUM<=10) temp    
WHERE temp.rn>5;
范例:取出11-15条记录
SELECT *
FROM (
      SELECT empno,ename,job,sal,hiredate,ROWNUM rn FROM emp
      WHERE ROWNUM<=15) temp
WHERE temp.rn>10;

6-10条记录相当于在第二页上(currentPage=2),取出5行记录,相当于每页显示5行(lineSize=5)
10  currentPage*lineSize=10
5   (currentPage-1)*lineSize=10
这种操作就是Oracle中实现的数据分页的核心结构,如果要给出语法:
SELECT *
FROM (
      SELECT 列,...,ROWNUM rn
      FROM 表名称,表名称,...
      WHERE ROWNUM<=(currentPage*lineSize) ORDER BY 字段 ...) temp
WHERE temp.rn>((currentPage-1)*lineSize);
此部分非常重要,必须重点掌握

猜你喜欢

转载自blog.csdn.net/amuist_ting/article/details/80669955