SQL视图:
什么是视图?
视图是在数据库中定义的虚拟表,他是基于一个或多个表查询的结果,可以像实际表一样被查询和操作。
作用:
1、可以简化复杂查询。
2、数据安全性,视图可以限制用户对底层表的访问权限。
3、数据抽象和封装:通过视图可以将多个表的数据抽象未一个数据表,简化数据结构和应用程序开发。
视图的创建:
CREATE[OP REOALCE]VIEW<视图名> AS <SELECT语句>
create or replace view vi_stu
as
select StuName,StuSex,Subject,score
from tbl_student join tbl_score ts on tbl_student.StuID = ts.StuID
在创建语句中会指定视图的列名(如果不修改的话,会默认为原始表结构的列名)
列名也是可以修改的,比如
create or replace view vi_stu (姓名,性别,科目,成绩)
as
select StuName,StuSex,Subject,score
from tbl_student join tbl_score ts on tbl_student.StuID = ts.StuID;
注意: 当原表数据发生改变,视图数据也将发生改变
当视图出现一下情况,将不能更新:
1、视图中不包含基表中所以被定义为非空又未指定默认值的列,视图不能INSERT操作
2、在定义视图时使用了join连接语句,视图将不支持INSERT 和 DELETE操作
3、在定义视图的select语句后的字段列表中使用了数学表达式 或 子查询,视图将不支持INSERT 也不支持UPDATE使用了数学表达式、子查询的字段值
4、在定义视图的select语句后的字段列表中使用了DISTICCT、聚合函数、GROUP BY、HABING、UNION等,视图将不支持INSERT,UPDATE,DELETE
5、在定义视图的select语句中包含了子查询,而子查询中引用了FROM后面的表,视图将不支持INSERT,UPDATE,DELETE
6、定义视图时使用了order by语句,视图将不能更新
视图的查看:
像表对象一样去查询
select * from vi_stu
将视图结果插入到新的基本表中:
INSERT INTO table_name1(字段列表1)
SELECT 字段列表2 FROM table_name2 WHERE 条件表达式 LIMIT 0,n;
table_name1:表示记录插入到哪个表中。
字段列表1:表示为哪些字段赋值。
字段列表2:表示从表中查询出哪些字段的数据。
table_name2:表示记录是从哪个表中查询出来的。
条件表达式:表示设置SELECT语句的查询条件。
指定条数:LIMIT 0,n
用于指定查询出多少条记录,即从第几条开始返回。
将 table_name2 中查询出来的记录插入到 table_name1 中以后,table_name2中原来的记录保持不变。
温馨提示:使用上述语法时,必须保证“字段列表1”和“字段列表2”中的字段个数相等,同时,也必须保证每 个对应字段的数据类型是一样的。如果数据类型不一样,数据库会报错并阻止INSERT语句向下执行。
有意思的是,当我们在表与表中的迁移中,迁移表不会把被迁移表的数据结构迁移,只会复制数据
视图使用实例:
#创建视图 注意,这里必须要去重,否则如果查出重复数据,那么在后续的数据操作中可能会报错
create or replace view vi_stuid
as
select distinct StuID from tbl_score where Score < 70;
#查看视图结构
select * from vi_stuid;
#使用视图 修改原始表
update tbl_score
set Score = Score + 2
where StuID in (select StuID from vi_stuid)
删除视图:
#可以一次删除一个视图
drop view vi_bank(视图名);
#也可以同时删除多个视图
drop view vi_stuid,vi_stu