SQL视图基本操作

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值