ORACLE——约束、伪列、视图

--回顾
--约束
--方法1
create table t1
(
   sno varchar2(10) primary key,
   sage integer check(sage between 0 and 200),
   saddr varchar2(10) default 'dont know'   
)
--方法2
create table t2
(
   sno varchar2(10)  ,
   sage integer  ,
   saddr varchar2(10)  ,
   constraint pk primary key(sno),
   constraint ck check(sage between 0 and 200)   
)
--方法3
create table t3
(
   sno varchar2(10) , 
   sage integer  ,
   saddr varchar2(10) 
)
alter table t3 add constraint pk1 primary key(sno);
alter table t3 modify saddr default 'dont know';


--新内容:视图-view
--1、top n(oracle没有top),如何实现
--预备知识:伪列(在建表时,oracle系统自动帮我们建立,但是
--不显示在column里面的一些辅助列)
--oracle
系统为了实现完整的关系数据库功能,
系统专门提供了一组称为伪列 (Pseudocolumn)
的数据库列,这些列不是在建立对象时由我们
完成的,而是在我们建立时由Oracle完成的。
Oracle
目前有以下伪列:
CURRVAL AND NEXTVAL 使用序列号的保留字
LEVEL 查询数据所对应的层级
ROWID 记录的唯一标识
ROWNUM 限制查询结果集的数量(为查询结果编号)
--例子
select rowid,emp.* from emp;
select rownum,emp.* from emp;
--问题:查询工资最高的前3个人的姓名和工资
select rownum,emp.* from emp  
order by sal desc
--错误原因,查询完以后才执行order by
--解决方法*****:
select rownum,t.* from
(select * from emp order by sal desc)t
where rownum<=3


--问题:查询工资排名4-9的姓名和工资(上网学习)
select * from
(select rownum id,t.* from
(select * from emp order by sal desc)t) t1
where id>=4 and id<=9


--2、为什么要用视图
--类似下面这种复杂查询,直接在高级语言中书写,出错率很高
select ename,sal from
(select rownum id,t.* from
(select * from emp order by sal desc)t) t1
where id>=4 and id<=9
--视图:固化的查询,把查询直接存到数据库服务器,
--在调用时,再执行里面的查询,视图中没有数据,
--只有代码。


--创建视图:
create or replace  view v_name_sal
as
select ename,sal from
(select rownum id,t.* from
(select * from emp order by sal desc)t) t1
where id>=4 and id<=9;


--基表:视图所引用的表


--查询视图(实质:执行视图里面存放的查询语句)
select * from v_name_sal;


--可以通过视图修改和删除其基表中的数据
--但是是有条件的(见课本)
create or replace view v_empno_sal
as
select empno,sal from emp;


select * from v_empno_sal;


update v_empno_sal set sal=sal+300
where empno=7369;


select * from emp;--查看被修改的基表




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值