分页
rowid 和 rownum
rownum
—— 是伪列,是一组结果集的序号
只要有select就会有结果集。就会有rownum,每一套结果集都会有自己的rownum。(每一个select都不一样)
规律:把已经确定了的结果集中的数据。第一行用1开始标记,按行标记值依次+1
select empno,ename,rownum from emp; //显示伪劣
注意:序列号是生产结果集的时候添加的。则在where判断之后。但是会有一个预假设的过程
执行顺序 为 from— where---- select 因此 where 中rownum 可以预先假设。从1开始假设。因此如果where 中条件是rownum>3的话,就会没有数据。因为每次取出来一条都当成num1 来进行判断, 而不保留,则不+1。
如select empno,ename,rownum from emp where rownum <=5; 这个时候可以有预假设。
而select empno,ename,rownum from emp where rownum <=5 and rownum>3;这个时候会失效
如果在使用rownum值判断之前就已经确定了一个结果集,这个结果集中的rownum就是已经确定的,这个时候可以使用rownum字段来做筛选。(外面嵌套一层select)
select * from (select empno, ename, rownum n from emp where n >= 5 and n <= 10;
这个时候一定要用别名,因为外部也有rownum伪列。不用别名会默认用外部的rownum列。
如果存在排序,rownum的字段也可能会乱掉
-
如果根据主键进行排序,则先order by ,则先排序,再先rownum
-
如果根据非主键字段,则先rownum 。然后再 order by
-
解决方式一样,外层嵌套select。
select empno, ename, deptno, rownum 外层的rownum, num 内层rownum from (select empno, ename, deptno, rownum num from emp order by deptno);
分页: 通过指定rownum 的范围来是实现分页。
select e.*, rownum from (select * from emp order by sal desc) e
where rownum <= 5 and rownum >= 3; 3-5行的记录。
rowid
也是伪列,只是在数据插入表中就存在,并且每条记录的rowid都是唯一的。
作用:可以用来对无主键表进行去重
rowid ——相当于对象的地址。每一条数据都唯一。是根据对象的地址算出来的。可以区分唯一。尤其在没有主键的表中,可以用rowid去区分。
视图
介于表和结果集之间的对象就是视图,其实也是一个结果集。但是这个结果集可以被存储,以后可以通过查询该视图获取结果,可以用来简化sql。如果一条sql很复杂,且查询的时候经常用到,就可以设置为视图。
创建视图
create or replace view 试图名字 as 结果集 with read only;
-create or replace view vw_emp as select * from emp where deptno=10 with read only;
创建的时候如果提示无权限,通过 grant dba to 用户名; 授权
回收: revoke dba from 用户名;
使用视图
-select * from vw_emp ;
通过视图名去访问
删除视图
drop view 视图名。
-drop view vw_emp;
索引
-
索引是数据库对象之一,用于加快数据的检索,类似于书籍的索引。在数据库中索引可以减少数据库程序查询结果时需要读取的数据量,类似于在书籍中我们利用索引可以不用翻阅整本书即可找到想要的信息。
-
索引是建立在表上的可选对象;索引的关键在于通过一组排序后的索引键来取代默认的全表扫描检索方式,从而提高检索效率
-
索引在逻辑上和物理上都与相关的表和数据无关,当创建或者删除一个索引时,不会影响基本的表;
-
索引一旦建立,则再后期对表进行增删改操作时候,Oracle会自动维护索引。
-
因为索引需要维护,所以能提高查询效率但是会降低增删改效率。需要进行取舍
-
创建主键时会自动在该列上创建索引
-
唯一的字段适合设置索引,还有重复量小的字段。因为定位到后,如果有重复还需要筛选
语法
创建索引
create index 索引名 on 表名(字段名)
-create index suoyin on emp(ename)
删除索引
drop index 索引名
-drop index suoyin