1 .视图(View)
视图:可以通过创建表的视图来表现数据的逻辑子集或数据的组合。
视图的优越性:
1)视图限制数据的访问,因为视图能够选择性的显示表中的列。
2)视图可以用来构成简单的查询以取回复杂查询的结果。例如,视图能用于从多表中查询信息,而用户不必知道怎样写连接语句。
3)视图对特别的用户和应用程序提供数据独立性,一个视图可以从几个表中取回数据。
视图类型 :
简单视图和复杂视图
1)简单视图(操作一张表,不能包含函数和分组,但是可以执行DML操作)。
示例:
需求:创建一个视图,视图中包含部门 id 为 80 的员工的 id,名字以及薪水。
create view emp80 as select e.employee_id,e.first_name,
e.last_name from employees e;
用子查询中的列别名创建视图
需求:创建一个视图,部门id为50的员工用id_number命名该列,员工名字使用name命名,包含员工的年薪使用ann_salary命名。
create view emp50 as select e.employee_id id_number,e.last_name name,
12*e.salary ann_salary from employees e;
2)创建复杂视图(操作多个表,可以包含函数和分组,不能执行DML操作)。
从视图中取回数据
例1:
需求:查询部门 id 为 80 的员工信息,包含他们的 id,名字以及薪水。select * from emp80;
例2:
需求:查询部门 id 为 50 的员工信息,包含他们的 id 和薪水。select e.id_number,e.ann_salary from emp50 e;
操作视图(增/删/改/查)可以将视图看作一张表进行操作
1)(增)插入视图本身是一张逻辑表(虚拟表),真实的数据保存到基表中(emp80)
insert into emp80(employee_id,first_name,last_name)
values(90,'neza','li');
2)删除
delete from emp81 where employee_id=91;
3)(改)修改 first_name为子牙,名字修改为姜 ,id改为91
update emp80 set first_name='子牙',last_name='姜',
employee_id=91 where employee_id=90;
4)查询
select * from emp80;
2 .序列(Sequence)
序列:序列是用户创建的数据库对象,序列会产生唯一的整数。
作用:序列的一个典型的用途是创建 一个主键的值,它对于每一行必须是唯一的。
创建序列的语法结构:
创建序列:
create sequence 序列名称[参数列表]
参数列表: increment by增长间隔
start with起始值
maxvalue最大值
minvalue最小值
cycle/ nocycle 是否循环
cache/ nocache是否缓存
例:
1)需求:创建一个序列名称为: dept_seq, 增长间隔为10, 从120开始,最大值为9999,不缓存。不循环使用。
create sequence dept_seq increment by 10 start with 120 maxvalue 9999 nocycle nocache;
2)使用默认参数(从1开始,每次加1,不限制最大值,不循环,缓存20)。
create sequence dept_seq2;
3)查询序列
select * from user_sequences;
4)修改序列:
语法结构: alter sequence 序列名 [参数列表]
修改序列的原则 :
a)必须是被修改序列的所有者,或者有 ALTER 权限。
b)用 ALTER SEQUENCE 语句,只有以后的序列数会受影响。
c)用 ALTER SEQUENCE 语句,START WITH 选项不能被改变。为了以不同的数重新开始一个序列,该序列必须被删除和重新创建。
例: 需求:将 dept_seq 序列中的增长量修改 20,最大值修改为 999999。
alter sequence dept_seq2 increment by 20 maxvalue 999999 nocycle nocache;
5)删除序列
删除序列语法格式:drop sequence 序列名;
需求:删除 dept_seq 序列
drop sequence dept_seq;
使用序列
NEXTVAL 和 CURRVAL 伪列
1)NEXTVAL 返回下一个可用的序列值,它每次返回一个唯一的被引用值,即使对于不同的用户也是如此 。
2)CURRVAL 获得当前的序列值 。
3)在 CURRVAL 获得一个值以前,NEXTVAL 对该序列必须发布。
3 .索引(Index)
索引 :在关系型数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的 数据页的逻辑指针清单。
作用:索引提供对表中行的直接和快速访问,它的目的是用已索引的路径快速定位数据以减少 磁盘 I/O。
使用索引的场合:
1)一个列包含一个大范围的值 ;
2)一个列包含很多的空值;
3)一个或多个列经常同时在一个 WHERE 子句中或一个连接条件中被使用;
4)表很大,并且经常的查询期望取回少于百分之 2 到 4 的行。
使用索引的优缺点:
优点:提高查询效率;索引提供对表中行的直接和快速访问,它的目的是用已索引的路径快速定位数据以减少磁盘 I/O。
缺点:建立过多的索引并不意味着更快的查询,具有索引的基表被提交的每个DML操作意味着索引必须更新与基表关联的索引越多,对Oracle数据库性能的影响越大,Oracle数据在每次DML操作之后必须更新所有的索引。
索引的类型 :
唯一性索引:当你在一个表中定义一个列为主键,或者定义一个唯一键约束时 Oracle服务器自动创建该索引,索引的名字习惯上是约束的名字。
非唯一索引:由用户创建,例如,可以创建一个 FOREIGN KEY 列索引用于一个查询中的连接来改进数据取回的速度。
创建索引语法:create index索引名 on表名(列名)
例:
create index emp_ index on emp (ename) ;
创建复合索引
create index emp_ index2 on emp ( job, sal) ;
创建函数索引
create index dept_ upper2 on dept (upper (dname)) ;
索引的数据字典表(user_ indexes)
drop index dept_ upper2 ;
删除索引语法: drop index 索引名;
drop index dept_ upper2 ;
同义词(Synonym) 可理解为“为数据对象起别名”
语法格式: create synonym 别名for数据对象(表/视图..)
create synonym d for dept;
删除同义词:drop synonym同义词名;
drop synonym d;
4 .Oracle 的分页查询
分页查询原则: 在内建视图中通过 rownum 伪劣值的判断来指定获取数据的数量。
rowid和rownum_分页查询
1)rowid:表中自动产生的伪列,用来指定每行所保存的绝对路径。
2)rownum:表中自动产生的伪列,按insert插入顺序从1到最新一条进行排序,生成连续的数字,用来当作行号使用。
分页查询的作用:按批次的来呈现数据,用户的体验更好,并且降低了对服务器资源的消耗。
分页单位: 每页展示数据的条数。
当前页: 展示的第几页。
例:
需求: 查询雇员表中数据,每次只返回 10 条数据。
select * from (select rownum rn,e.* from employees e) em
where em.rn between 11 and 20;