Oracle数据库学习(一)

--视图的学习
--视图是一种虚表,视图建立在已有表的基础上,视图依赖建立的这些表成为基表
--向视图提供数据内容的语句为SELECT语句,可以将视图理解为储存起来的SELECT语句,
--视图向用户提供基表数据的另一种表现形式
--为什么使用视图?
--1.控制数据访问
--2.简化查询
--3.避免重复访问相同的数据
--创建视图
create view empview1
as (
select  
       t.accessorynum,t.billdate,t.billmaker
 from ap_paybill t
 )
--查询视图
select * from empview1;

--修改视图数据 
create or replace view empview1
as (
select  
       t.accessorynum,t.billdate,t.billmaker,t.billno
 from ap_paybill t
 )
--创建只能读的视图DML
create or replace view empview1
as (
select  
       t.accessorynum,t.billdate,t.billmaker,t.billno
 from ap_paybill t  
 )
with read only --只读视图
--简单视图和复杂视图区别
--1.在创建视图中select语句使用了函数或者分组则为复杂视图
--2,简单视图一定可以进行DML操作而复杂视图有时可以

--删除视图
drop view empview;  
--Top-N分析
--查询一个列中最大或最小的n个值
--最大和最小的是Top-N最关心的
--例如工资前10 rownum 只能使用<或者<=,而用=,>,>=都不能返回任何值
select rownum,employee_id,last_name,salary
from (select employee_id,last_name,salary
from emp
order by salary desc
)
where rownum<= 10
--查询区间 40~50
select *
from(
select rownum rn,employee_id,last_name,salary
from (select employee_id,last_name,salary
from emp
order by salary desc
)
) where rn<= 50 and rn>40
--显示视图的结构 
desc emp;
--其他数据库对象 序列 索引 同义词
--序列:提供有规律的数值
--索引:提高查询
--同义词:别名
--序列:可供多个用户用来产生唯一数值的数据库对象
--1.自动提供唯一的数值
--2.共享对象
--3,主要用于提供主键值
--4.将序列值装入内存可以提高访问效率
--创建一个序列
create sequence empseq
increment by 10 --每次增长10
start with  10 --从10开始
maxvalue 100 --最大值
minvalue 10
cycle --需要循环
nocache -- 不需要缓存登陆
--查询序列
select empseq.currval from dual; --当前序列
select empseq.nextval from dual; --下一个序列
--给插入的表添加序列
insert into emp01
values(emp.nextval,'CC',21651)
--修改序列
alter sequence empseq
increment by 1 --增长1
nocycle --不循环
--不可随意修改序列的初始值
--序列在下列会出现裂缝
--1.回滚
--2.系统异常
--3.多个表同时使用同一个序列(尽量一个表一个序列)
--查询用户所拥有的序列
select * from user_sequences;
--删除序列
drop sequence empseq;
--索引
--1.一个独立于表的模式的对象,可以存储与表不同的磁盘或表空间中。
--2.索引被删除或损坏,不会对表产生影响,其影响的只是查询的速度。
--3.索引一旦建立,Oracle管理会对其进行自动维护,而且由Oracle管理系统决定何时使用索引,用户不用在
--查询语句中指定使用哪个索引
--4.在删除一个表时,所有基于该表的索引会自动被删除
--5.通过指针加速 Oracle服务器的查询速度
--6.通过快速定位数据的方法,减少磁盘的I/O操作
--创建索引
--1.自动创建:在定义Primary key或者UNIQUE约束系统自动在相应的列上创建唯一性索引
--2.手动创建:用户可以在其它列上创建非唯一的索性,以加速查询
create index emp01_id_ix on emp01(emp_id);
--删除索引
drop index emp01_id_ix;
--什么时候创建索引
--1.列中数据值分布范围很广
--2.列经常在WHERE子句或连接条件中出现
--3.表经常被访问而且数据量很大,访问的数据大概占
--数据总量的2%到4%
--同义词
--1.方便访问其它用户的对象
--2.缩短对象名字的长度
--创建同义词 synonym
create synonym e from emp;
---------控制用户权限---------------
--数据库安全性:
--系统安全性
--数据安全性

--创建用户
create user nc --用户名
identified by nc --密码
--系统权限  ,以程序开发者为例,一般有
--1.create session(创建会话)权限
--2.create table (创建表)权限
--3.create sequence (创建序列)权限
--4.create view (创建视图)权限
--5.create procedure (创建过程)权限
--授予用户权限grant
grant create session 
to nc;
grant create view 
to nc;
--创建用户的表空间  
--用户没有表空间时,无法操作表
alter user nc quota --表空间大小 quota 5M 
unlimited   --表空大小无限
on users --作用到的表空间
--用户改密码
alter user nc 
identified by nc1;

--创建角色
--可以更好的控制用户的权限,赋予用户角色
--创建角色
create role nc_role;
--给角色赋予相应的权限
grant create session,
create table,
create sequence
to nc_role;
--把角色赋予用户
grant nc_role
to nc;
--对象权限
--1.不同的对象具有不同的对象权限
--2.对象的拥有者拥有所有的权限
--3.对象的拥有者可以向外分配权限
--分配给其他用户对象的操作权限
grant select,update --把scott用户的查询,修改权限授予nc用户
on scott.emp
to nc;
--分配对象权限的能力
grant select
on scott.emp
to nc  --to public 是给所有的用户
with grant option;  --nc用户还可以把得到的查询对象的权限赋予他人
--收回对象的权限
revoke select
on scott.emp
from nc;
--用户还拥有系统的权限

--SET运算符
--UNION(去重复)/UNION ALL 并集 
--Intersect 交集
--Minus 差集
-- 默认会按照到第一列的顺序排序
select id,department_id
from employees01
union  --UNION ALL; Intersect ; Minus;
select id,department_id
from employees02
order by 1 desc; --相对位置

--处理不匹配的查询
select id,department_id,to_char(null)
from employees01
intersect
select to_number(null),department_id,department_name
from employees02
--查询排序
select 'study at',2 a_dummy
from dual 
union
select 'I want to',1
from dual 
union
select 'beijing',3
from dual 
order by 2;
-- column a_dummy noprint;  不让a_dummy打印PLSQL语句
来自CSDN用户 nothing 地址http://blog.csdn.net/u011687186

你可能感兴趣的:(Database)