网站广告动图怎么做,建设网上银行个人登录入口,云工厂网站建设,阿里云可以做哪些网站文章目录 前言1.什么是视图#xff1f;2.创建视图3. 使用视图4. 修改数据4.1.注意事项 5. 删除视图6.视图的优点 前言
前面我们学习了索引#xff0c;这次我们来学习视图 1.什么是视图#xff1f;
视图是一个虚拟的表#xff0c;它是基于一个或多个基本表或其他视图的查询… 文章目录 前言1.什么是视图2.创建视图3. 使用视图4. 修改数据4.1.注意事项 5. 删除视图6.视图的优点 前言
前面我们学习了索引这次我们来学习视图 1.什么是视图
视图是一个虚拟的表它是基于一个或多个基本表或其他视图的查询结果集。视图本身不存储数据而是通过执行查询来动态生成数据。用户可以像操作普通表一样使用视图进行查询、更新和管理。视图本身并不占用物理存储空间它仅仅是一个查询的逻辑表示物理上它依赖于基础表中的数据。
2.创建视图
语法
create view view_name [(column_list)] as select_statement3. 使用视图
例如查询用户的所有信息和考试成绩
select s.student_id,s.name,cls.class_id,cls.name,c.course_id,c.name,sc.score
from student s,class cls,course c,score sc
where s.class_id cls.class_id
and sc.student_id s.student_id
and sc.course_id c.course_id
order by s.student_id;所有有这样开发需求的程序员都需要写这么复杂的SQL为此我们为上面建立一个视图。
create view v_student_score as(
select s.student_id,s.name,cls.class_id,cls.name,c.course_id,c.name,sc.score
from student s,class cls,course c,score sc
where s.class_id cls.class_id
and sc.student_id s.student_id
and sc.course_id c.course_id
order by s.student_id
);改进的语句
create view v_student_score as(
select
s.student_id,
s.name as student_name,
cls.class_id,
cls.name as class_name,
c.course_id,
c.name as course_name,
sc.score
from student s,class cls,course c,score sc
where s.class_id cls.class_id
and sc.student_id s.student_id
and sc.course_id c.course_id
order by s.student_id
);使用视图
select * from v_student_score;为了解决上面出现重复列的问题也可以在视图中指定列名
create view v_student_score_v1
(id,name,class_id,class_name,course_id,course_name,score)as(
select s.student_id,s.name,cls.class_id,cls.name,c.course_id,c.name,sc.score
from student s,class cls,course c,score sc
where s.class_id cls.class_id
and sc.student_id s.student_id
and sc.course_id c.course_id
);4. 修改数据
通过真实表修改数据会影响视图 将上面的数据改为 99并观察视图的数据
update score set score 99 where student_id 1 and course_id 1;select * from score;select * from v_student_score order by id;通过视图修改数据会影响基表 如果修改视图中的数据会影响基表吗
select * from v_student_score;将上述分数改为80分 但是发生了下面的问题 那就改变视图 v_student_score_v1 的数据
update v_student_score_v1 set score where id 1;观察视图和基础表的数据
select * from v_student_score_v1 order by id asc;select * from score where student_id 1;因此不论更新了视图还是基础表都会相互被影响查询出来的数据都是最新结果
4.1.注意事项
修改真实表会影响视图修改视图同样也会影响真实表以下视图不可更新 创建视图时使用聚合函数的视图创建视图时使用distinct创建视图时使用GROUP BY 以及HAVING子句创建视图时使用UNION或UNION ALL查询列表中使用子查询在FROM子句中引用不可更新视图
5. 删除视图
drop view view_name;6.视图的优点
1.简单性 视图可以将复杂的查询封装成一个简单的查询。例如针对一个复杂的多表连接查询可以创建一个视图用户只需查询视图而无需了解底层的复杂逻辑。 2. 安全性 通过视图可以隐藏表中的敏感数据。例如一个系统的用户表中可以创建一个不包含密码列视图普通用户只能访问这个视图而不能访问原始表。 3. 逻辑数据独立性 视图提供了一种逻辑数据独立性即使底层表结构发生变化只需修改视图定义而无需修改依赖视图的应用程序。使用到应用程序与数据库的解耦 4. 重命名列 视图允许用户重命名列名以增强数据的可读性 完