Oracle数据库学习

Oracle数据库学习第七章

本章学习要点:

  • 序列

  • 视图

序列

概念:序列是用于生成唯一、连续序号的对象序列可以是升序的,也可以是降序的使用CREATE SEQUENCE语句创建序列

语法
CREATE SEQUENCE 序列化的名称
START WITH 10 –开始10
INCREMENT BY 10 –每次步长10
MAXVALUE 2000 –最大值2000
MINVALUE 10 –最小值10
NOCYCLE –没有循环
CACHE 10; –缓存10个

–1)创建序列化
create sequence seq_id –默认开始值为1,每次步长1;
start with 20
increment by 1 —如果是1(省略不写)

–2)查看当前序列
select seq_id.currval from dual;

–2)查看下一个序列
select seq_id.nextval from dual;
/*
通过序列的伪列来访问序列的值
NEXTVAL 返回序列的下一个值
CURRVAL 返回序列的当前值
*/

修改序列化
ALTER SEQUENCE 序列化名称
–不可以修改 START WITH 10 –开始10
INCREMENT BY 10 –每次步长10
MAXVALUE 2000 –最大值2000
MINVALUE 10 –最小值10
NOCYCLE –没有循环
CACHE 10; –缓存10个
MAXVALUE 5000 CYCLE;

视图

–什么是视图?
视图以经过定制的方式显示来自一个或多个表的数据
视图可以视为“虚拟表”或“存储的查询”
创建视图所依据的表称为“基表”

–视图有哪些优点?
提供了另外一种级别的表安全性
隐藏的数据的复杂性,简化的用户的SQL命令
隔离基表结构的改变
通过重命名列,从另一个角度提供数据

–视图的语法
CREATE [OR REPLACE] [FORCE] VIEW
view_name [(alias[, alias]…)] –别名
AS select_statement
[WITH CHECK OPTION]
[WITH READ ONLY];

注:创建视图需要授权
SQL> conn system/system@ORCL;
SQL>grant create view to sqb;

–(1)创建视图
create or replace view vw_emp
as
select ename,sal from emp;

–查看视图
select * from vw_emp;

–(2)部门经理查看
select ename,job,sal,comm from emp where deptno=20;

create or replace view vw_emp2
as
select ename,job,sal,comm from emp where deptno=20;

–查看
select * from vw_emp2;
–更新JONES的福利500 –>原来的表(基表数据)
update vw_emp2 set comm =nvl(comm,0)+500 where ename=’JONES’

select * from emp where ename=’JONES’

–(3)查看每个部门的工资

select deptno,sum(sal) from emp group by deptno

–创建视图
–视图中可以使用单行函数、分组函数和表达式
create or replace view vw_emp3
(dno,sums) –别名
as
select deptno,sum(sal) from emp group by deptno; –分组

select * from vw_emp3;
–复杂视图
在视图上也可以使用修改数据的DML语句,如INSERT、UPDATE和DELETE
视图上的DML语句有如下限制:
–1)只能修改一个底层的基表
–2)如果修改违反了基表的约束条件,则无法更新视图
–3)如果视图包含连接操作符、DISTINCT 关键字、集合操作符、聚合函数或 GROUP BY 子句,则将无法更新视图
–4)如果视图包含伪列或表达式,则将无法更新视图

select *from emp ;
select * from dept;

–查询员工的姓名,职位,工资 以及所在的部门名称,
SELECT ename,job,sal,dept.dname FROM emp inner join dept on emp.deptno = dept.deptno

create or replace view vw_emp4
as
SELECT ename,job,sal,dept.dname FROM emp inner join dept on emp.deptno = dept.deptno;

–查看
select * from vw_emp4;

–能否更新数据? SMITH=1000;
update vw_emp4 set sal=800 where ename=’SMITH’;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值