SQL视图
2015-06-28 15:47
387 查看
视图:
一、视图的概念
视图是一个虚表;数据库中只存放视图的定义;视图对应的数据仍存放在原来的表中;随着表中数据的变化,视图的数据随之改变。
对视图的查询与基本表一样;对视图的更新将受到一定的限制。
二、视图分类
1.行列子集视图:从单个基本表导出,保留基本表的码,但去掉其它的某些列和部分行的视图。
2.表达式视图:带虚拟列的视图。
3.分组视图:子查询目标表带有组函数或子查询带有GROUP
BY子句的视图。
三、定义与修改视图
建立视图,其一般格式为:
CREATE
VIEW <视图名>[(<列名>[,<列名>]...)]
AS <子查询>[WITH
CHECK OPTION]
其中子查询可以是任意复杂的SELECT语句,但通常不允许含有ORDER
BY子句和DISTINCT短语。
WITH
CHECK OPTION表示对视图进行UPDATE、INSERT和DELETE操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)。
如果CREATE
VIEW语句仅指定了视图名,省略了组成视图的各个属性列名,则隐含该视图由子查询中SELECT子句目标列中的诸字段组成。
在下列三种情况下必须明确指定组成视图的所有列名:
其中某个目标列不是单纯的属性名,而是集函数或列表达式;
多表连接时选出了几个同名列作为视图的字段;
需要在视图中为某个列启用新的更合适的名字;
需要说明的是,组成视图的属性列名必须依照上面的原则,或者全部省略或者全部指定,没有第三种选择。
例: 建立电商系学生的视图 --- 行列子集视图
create view ec_student
as select
sno , sname , age
from student where dept
= 'ec';
例: 建立电商学生的视图,并要求进行修改和插入操作时仍须保证该视图只有电商系的学生
create
view ec_student as
select sno,sname, age
from student where sdept='ec'
with check
option
insert
into ec_student (sno,sname,age,dept)
values ('2001','Rain Man',
20
, 'ec')
insert
into ec_student (sno,sname,age,dept)
values ('2001','Rain Man',
20
, '会计') /*
插入失败*/
视图不仅可以建立在单个基本表上,也可以建立在多个基本表上或者已定义好的视图。
例:建立电商系选修了号课程的学生的视图
create
view ec_s1(xh,xm,cj)
as
select student.sno,sname,score
from student,sc
where dept='ec'
and student.sno=sc.sno
and sc.cno='001'
带表达式的视图:
例:定义一个反映学生出生年份的视图
CREATE
VIEW BT_S(sno,sname,csnf)
as
select sno,sname,2005-age
from student
分组视图:带有集函数和GROUP
BY子句的查询
例:
将学生的学号及他的平均成绩定义为一个视图
CREATE
VIEW S_G(sno,avgscore)
AS
SELECT sno,
AVG(score)
FROM sc GROUP
BY sno
三、删除视图
DROP
VIEW <视图名>
一个视图被删除后,由此视图导出的其他视图也将失效,用户应该使用DROP
VIEW语句将他们一一删除。
四、关于更新的限制
并非所有的视图都可更新,有些视图的更新不能唯一地有意义地转换成对相应基本表的更新。
1、若视图是由两个以上基本表导出的,则此视图不允许更新。
2、若视图的字段来自字段表达式或常数,则不允许对此视图执行INSERT和UPDATE操作,但允许执行DELETE操作。
3、若视图的字段来自集函数,则此视图不允许更新。
4、若视图定义中含有GROUP
BY子句,则此视图不允许更新。
5、若视图定义中含有DISTINCT短语,则此视图不允许更新。
五、视图的作用
1、视图能够简化用户的操作
2、视图使用户能以多种角度看待同一数据
3、视图对重构数据库提供了一定程度的逻辑独立性
4、视图能够对机密数据提供安全保护
一、视图的概念
视图是一个虚表;数据库中只存放视图的定义;视图对应的数据仍存放在原来的表中;随着表中数据的变化,视图的数据随之改变。
对视图的查询与基本表一样;对视图的更新将受到一定的限制。
二、视图分类
1.行列子集视图:从单个基本表导出,保留基本表的码,但去掉其它的某些列和部分行的视图。
2.表达式视图:带虚拟列的视图。
3.分组视图:子查询目标表带有组函数或子查询带有GROUP
BY子句的视图。
三、定义与修改视图
建立视图,其一般格式为:
CREATE
VIEW <视图名>[(<列名>[,<列名>]...)]
AS <子查询>[WITH
CHECK OPTION]
其中子查询可以是任意复杂的SELECT语句,但通常不允许含有ORDER
BY子句和DISTINCT短语。
WITH
CHECK OPTION表示对视图进行UPDATE、INSERT和DELETE操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)。
如果CREATE
VIEW语句仅指定了视图名,省略了组成视图的各个属性列名,则隐含该视图由子查询中SELECT子句目标列中的诸字段组成。
在下列三种情况下必须明确指定组成视图的所有列名:
其中某个目标列不是单纯的属性名,而是集函数或列表达式;
多表连接时选出了几个同名列作为视图的字段;
需要在视图中为某个列启用新的更合适的名字;
需要说明的是,组成视图的属性列名必须依照上面的原则,或者全部省略或者全部指定,没有第三种选择。
例: 建立电商系学生的视图 --- 行列子集视图
create view ec_student
as select
sno , sname , age
from student where dept
= 'ec';
例: 建立电商学生的视图,并要求进行修改和插入操作时仍须保证该视图只有电商系的学生
create
view ec_student as
select sno,sname, age
from student where sdept='ec'
with check
option
insert
into ec_student (sno,sname,age,dept)
values ('2001','Rain Man',
20
, 'ec')
insert
into ec_student (sno,sname,age,dept)
values ('2001','Rain Man',
20
, '会计') /*
插入失败*/
视图不仅可以建立在单个基本表上,也可以建立在多个基本表上或者已定义好的视图。
例:建立电商系选修了号课程的学生的视图
create
view ec_s1(xh,xm,cj)
as
select student.sno,sname,score
from student,sc
where dept='ec'
and student.sno=sc.sno
and sc.cno='001'
带表达式的视图:
例:定义一个反映学生出生年份的视图
CREATE
VIEW BT_S(sno,sname,csnf)
as
select sno,sname,2005-age
from student
分组视图:带有集函数和GROUP
BY子句的查询
例:
将学生的学号及他的平均成绩定义为一个视图
CREATE
VIEW S_G(sno,avgscore)
AS
SELECT sno,
AVG(score)
FROM sc GROUP
BY sno
三、删除视图
DROP
VIEW <视图名>
一个视图被删除后,由此视图导出的其他视图也将失效,用户应该使用DROP
VIEW语句将他们一一删除。
四、关于更新的限制
并非所有的视图都可更新,有些视图的更新不能唯一地有意义地转换成对相应基本表的更新。
1、若视图是由两个以上基本表导出的,则此视图不允许更新。
2、若视图的字段来自字段表达式或常数,则不允许对此视图执行INSERT和UPDATE操作,但允许执行DELETE操作。
3、若视图的字段来自集函数,则此视图不允许更新。
4、若视图定义中含有GROUP
BY子句,则此视图不允许更新。
5、若视图定义中含有DISTINCT短语,则此视图不允许更新。
五、视图的作用
1、视图能够简化用户的操作
2、视图使用户能以多种角度看待同一数据
3、视图对重构数据库提供了一定程度的逻辑独立性
4、视图能够对机密数据提供安全保护
相关文章推荐
- SQL的集合操作
- mongodb建立索引时如何指定超时时间
- SQL查询语句(二)
- SQL查询语句(一)
- PL/SQL Developer连接本地Oracle 11g 64位数据库(转)
- SQL 数据类型
- MySQL中表复制:create table like 与 create table as select
- Oracle ->> 随机函数
- Oracle日期函数
- SQL中group by的用法
- oracle 用户创建
- oracle表空间创建
- oracle表空间使用情况
- Redis 笔记与总结6 Redis 高级应用之 事务处理、持久化操作、pub_sub、虚拟内存
- (转) 经典SQL练习题
- SCAN----Redis检索键值对
- mysql修改密码的注意点
- 数据库 UPDATE多条记录不同值,同时UPDATE多个字段
- MySQL v5.6.20安装配置
- Oracle开发人员守则