--回顾
--约束
--方法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;--查看被修改的基表
ORACLE——约束、伪列、视图
最新推荐文章于 2023-02-21 16:33:35 发布