Oracle数据库对象+分页查询

5 .1 序列

5.1.1 序列问题引出

select cid from clazz order by cid
insert into clazz values(4,'402班级','老师最优秀的班');
insert into clazz values(10,'402班级','老师最优秀的班');
--问题1:如果数据量比较大,插入新的数据的时候id怎么选取才能避免重复?

5.1.2使用序列

使用 :create sequence 序列名

特点1:默认开始是没有值的,也就是指针指在了没有值的位置。

特点2:序列名.nextval每次执行都会自增一次,默认步长为1

特点3:序列名.currval查看当前序列的值。开始是没有的。

作用:作为主键使用,动态的获取之间的值,这样新增数据的时候极大的避免了主键冲突

create sequence cnum;
select cnum.currval from dual---获取当前序列值
select cnum.nextval from dual---序列自增后返回当前值
							 
truncate table clazz
select * from clazz
insert into clazz values(cnum.nextval,'402班级','老师最优秀的班');--将序列作为主键

5.1.3主键自增

create sequence cc
start with 90---设定序列初始值
increment by 5---设定步长
insert into clazz values(cc.nextval,'402班级','老师最污的班');
select max(cid) from clazz
							--
select cc.nextval from dual                                                   
select * from clazz

5.1.4删除序列

drop sequence cc
----------------完整的序列格式-----------------------------------
create sequence aa--序列名
start with 20  --设置序列初始值
increment by 10 --设置步长
maxvalue 10000---设置最大值
cache  10  -----设置缓存

5.2 索引

5.2.1 索引作用

问题:当表中数据量比较大的时候,使用条件查询就会出现效率的问题

使用索引进行解决 提升查询效率

5.2.2原理

原理:类似于java中数组的折半查找,在数据库中数据使用B树形结构进行数据的存储,

5.2.3 创建索引

--创建索引 create index  表名_index_字段名 on 表名(字段名)
--特点:显示的创建,隐式的执行.在数据中会给主键默认创建索引。
create index emp_index_sal on emp(sal)--创建查询索引
select * from emp where sal=3000
select * from emp order by sal
create index emp_index_sal_desc on emp(sal desc);--创建单排序索引
select * from emp order by sal,job
create index emp_index_sal_desc2 on emp(sal desc,job asc);--创建多条件排序索引

5.2.4 删除索引

--drop index 索引名
drop index emp_index_sal_desc

5.3 视图

5.3.1 创建视图

create[or replace] VIEW view [alias]           --alias 别名
as subquery
[with check option[CONSTRAINT constraint]]
[with read only]
--简单视图的创建;例  建立用于查询员工、姓名、工资的视图
 create view emp_view
as
select empno,ename,sal from emp;

--建立获取部门变化为10 的部门号、部门名称及员工信息
create view dept_emp_view
as 
select d.deptno,d.dname,e.ename,empno,e.job
from dept d,emp e empno
where d.deptno=e.deptno and d.deptno=10;

5.3.2 删除视图

drop view 视图名

5.3.3 视图特点

  1. 保护真实表,隐藏重要字段的数据。保护数据。
  2. 在视图中的操作会映射执行到真实表中
  3. 可以手动开启只读模式 使用关键字 with read only
      --注意:视图的创建必须拥有dba权限
      create view stu as select sno,sname,sage from  stu.student
      create view stu2 as select sno,sname,sage from  student with read only 
      drop view stu
      select * from student
      select * from stu
      update stu2 set sname='wollo' where sno=1
      grant dba to stu

5.4 分页查询

问题:当一个表中的数据量特别大的时候,如果一次性全部显示给用户,则造成页面过于庞大,体验极差。

解决:使用分页查询

rownum关键字

  --rownum关键字:oracle对外提供的自动给查询结果编号的关键字,与每行的数据没有关系。
    --注意:rownum关键字只能做< <=的判断,不能进行> >=的判断
select rownum ,e.* from emp e
 --查询员工信息的前5条数据 第一页数据
select rownum r,e.* from emp e where rownum <=5
select * from (select rownum r,e.* from emp e where rownum <=5) t where r>0
 --查询员工信息的6-10条数据 第二页数据
 select rownum r,e.* from emp e where rownum <=10
 select rownum,t.* from (select rownum r,e.* from emp e where rownum <=10) t where r>5
--查询员工信息的11-15条数据 第三页数据
select rownum r,e. * from emp e where rownum<=15
select * from (select rownum r,e. * from emp e where rownum<=15) t where r>10
--分页规律总结:每页显示m条数据,查询第n页数据
select * from (select rownum r,e. * from 要分页的表 e where rownum<=m*n) t where r>m*n-m 
--要分页的表既可以是真实的表,也可以是一个查询语句
--分页查询员工信息按照工资排序
select * from (select rownum r,t.* from (select * from emp  order by sal) t where rownum<=10 ) where r>5

你可能感兴趣的:(Oracle,数据库,oracle,sql)