Oracle【序列、索引、视图、分页】

一、Oracle序列
语法:create sequence 序列名
 特色1:默认是无值,指针指向没有值的位置
 特色2:序列名.nextval 每次执行值会自增一次,步长为 1
 特色3:序列名.currval查看当前序列的值。[默认是没有,须要建立再执行先]
做用:做为主键使用,动态的获取主键的值,这样新增数据的时候的避免了主键冲突
  --使用的是 序列名.nextval做为主键
注意:主键是非空惟一,不须要主键的值是连续的值,不重复便可sql

1 --建立默认序列
2 create sequence cc;--建立序列
3 select cc.nextval from dual;--递增的方式去建立序列
4 select cc.currval from dual;--查询当前序列 
 1 --建立测试表
 2 create table student(
 3      tid number(10) primary key,
 4       tname varchar(100) not null
 5       )
 6 --添加测试数据
 7 --以前写法:【多复制多改动不少数据,费时间】
 8 insert into student values(1,'迪丽热巴');
 9 insert into student values(2,'柚子解说');
10 --使用序列添加
11 insert into student values(cc.nextval,'迪丽热巴');
12 insert into student values(cc.nextval,'柚子解说');
1 --建立自定义序列
2 create sequence c1--建立序列
3 start with 5 --设置开始位置
4 increment by 2 --设置步长
5 select c1.nextval from dual
6 select c1.currval from dual
7 --删除序列:drop sequence 序列名
8 drop sequence cc;

二、Oracle索引
做用:提高查询效率,处理大量的数据才会发现索引的强大之处
--特色:显示的建立,隐式的执行
--注意:oracle会自动给表的主键建立索引。[通常是编号,学号等]
使用索引:【建立、删除】oracle

1 --建立语法
2 create index 索引名 on 表名(字段名)
3 --测试数据
4 create index index_student_tname on student(tname)--建立索引
5 select * from student where tname='柚子解说'
6 --删除索引
7 drop index index_student_tname

三、Oracle视图
使用视图:【建立、删除】
建立视图: create view 视图名 as select 对外提供的内容 from 真实表名 
删除视图: drop view 视图名 
视图特色:
 特色1:保护真实表,隐藏重要字段的数据。保护数据。
 特色2:在视图中的操做会映射执行到真实表中
 特色3:能够手动开启只读模式 使用关键字 with read only
注意:视图的建立用户必须具备DBA权限测试

1 --测试视图
2 --建立视图并对外提供了sid,sname,ssex三个字段
3 create view stu as select sid,sname,ssex from student
4 select * from student--可查询全部的详细数据
5 select * from stu--只能查询到视图对外开放的字段

--视图的只读模式
create view stu2 as select sid,sname,ssex from student with read only 

四、分页
当一个表中的数据量庞大时,若是数据一次性所有显示给用户,则形成页面过于庞大,体验感low。
使用:rownum 关键字 :--oracle对外提供的自动给查询结果编号的关键字,与数据没有关系。
注意:rownum 关键字只能作< <=的判断,不能进行> >=的判断spa

1 --查询员工信息前5条数据[第一页]
2 select rownum,e.* from emp e where rownum<=5
3 select * from (select rownum r,e.* from emp e where rownum <=5) t where r>0;

1 --查询员工信息的6-10条后全部数据[第二页]
2 select * from (select rownum r,e.* from emp e where rownum<=10) t where r>5

1 --查询员工信息的11-15条数据[第三页]
2 select * from (select rownum r,e. * from emp e where rownum<=15) t where r>10;


分页的总结:每页显示n条数据,查询第m页数据 
select * from (select rownum r,e. * from 分页的表 e where rownum<=n*m) t where r>n*m-n;
指针

例子:每页显示3条数据,查询第2页的数据
select * from (select rownum r,e. * from emp e where rownum<=3*2) t where r>3*2-3;
select * from (select rownum r,e. * from emp e where rownum<=6) t where r>3;


灵活应变:code

1 --只查询员工姓名,工资。【每页显示3条数据,查询第4页的数据】
2 select * from (select rownum r,e. * from emp e where rownum<=3*4) t where r>3*4-3;
3 select t.ename,t.sal from (select rownum r,e. * from emp e where rownum<=12) t where r>9;


1 --分页查询员工信息按照工资排序
2 select * from (select rownum r,t.* from (select * from emp  order by sal desc) t where rownum<=10 ) where r>5

相关文章
相关标签/搜索