一、视图
语法:create view 视图名称 as 子查询
例:创建一视图,包含全部的20部门的雇员信息(雇员编号,姓名,工作,雇佣日期)
create view emp20 as select empno,ename,job,hiredate from emp wheredeptno = 20;
删除视图:drop view 视图名称
替换视图:create or replact 视图名称 as 子查询
更换视图时不需要先执行删除操作,系统会为用户自动删除及重建
create or replact view emp20 as select * fromemp where deptno = 20;
查询部门名称、部门人数、平均工资以及最低工资的雇员姓名
1、selectd.deptno,d.dname,ed.c,ed.a,e.ename from emp e,(select deptno,count(empno) c,avg
(sal) a,min(sal) m from emp e group bydeptno) ed,dept d where e.deptno = d.deptno and
e.deptno = ed.deptno and e.sal = ed.m;
2、先建立一张视图,然后再做查询
create view ed as select deptno,count(empno) c,avg(sal) a,min(sal) mfrom emp e group by
deptno;
select d.deptno,d.dname,ed.c,ed.a,e.ename from emp e,ed,dept d wheree.deptno = d.deptno
and e.deptno = ed.deptno and e.sal = ed.m;
with check option ---> 创建视图后不能再进行更新操作
例:create or replace view emp20 asselect * from emp where deptno =20 with check option;
update emp20 set deptno = 30 where empno = 7788; //系统报错,提示:视图 with check
option where 子句违规
update emp20 set ename = '斯科特' where empno = 7788; //更新成功
总结:with约束后,再更新视图时,除了创建条件不能更新,其他的字段均可更新。即取决于where
后面的条件
with read only ---> 创建的视图只读,即只能读取操作
例:create or replace view emp20 asselect * from emp where deptno = 20 with read only;
update emp20 set ename = '斯科特' where empno = 7788; //提示错误:无法对只读视图进行
DML 操作
二、序列
语法:create sequence 序列名
[increment by n] 每次增长的长度
[start with n] 从第几个序列开始
[{maxvalue n | nomaxvalue}] 最大值
[{minvalue n | nominvalue}] 最小值
[cycle | nocycle] 增长到最大值后,回到最小值,重新开始增加
[{cachen | nocache}]断开后重新连接,从n开始继续增长
序列创建完成之后,所有的自动增长由用户自己处理,序列的两种操作:
nextVal ---> 取得序列的下一个内容
currVal ---> 取得序列的当前内容
例:创建一个序列
create sequence myseq;
建立一张验证序列的表
create table testseq(next number,curr number);
向表中增加数据
insert into testseq(next,curr)values(myseq.nextval,myseq.currval);
删除序列:drop sequence 序列名
三、索引
将某张表中的某一列放入一张索引表中,通过查找索引表就能得到对应的数据
语法:create index 索引表名
Oracle的索引表
1、B树索引(二叉树的形式)默认
2、位图索引
如果一张表中有主键,那么会自动创建索引或手动创建:
create index myindex on emp(deptno);---创建索引表
create index myindex on emp(deptno,job);----创建两张索引表