上一篇讲了索引,索引提高了表查询的速度,这一篇讲视图。
视图
视图,数据库中的一个虚拟表。
目录
视图
视图概述
前期准备
创建视图
单表视图
多表视图
查询视图
删除视图
视图概述
视图同真实表一样具有表的功能,但是虚拟的,用于其他不便展示数据的保护,只展示想要展示的数据,这个虚拟表的内容并非原表一样拥有全部相关数据。但视图可以像表一样进行各种查询sql的操作。
本质可以理解为是基于一个复杂的sql查询语句的结果封装成的一个子表
视图本身并不包含任何数据,它只包含映射到基表的一个查询语句,当基表数据发生变化,视图数据也随之变化。
前期准备
在创建视图前,我们需要相关的基础表来支撑
我们假设,一个大学要对外发布上榜考生名字以及开学日学生分班信息,我们需要准备一个学生表和一个班级表。
按以下内容创建两张基础表
create table students
(
s_id varchar(15) primary key,
name varchar(50) not null,
age int not null,
c_id varchar(15) not null
);
create table class
(
c_id varchar(15) primary key,
name varchar(50) not null,
note text
);
分别插入学生信息和班级信息
insert into students
values('RG20230101','小米',18,'RG23A1'),
('RG20230102','小花',18,'RG23A1'),
('RG20230103','小刘',19,'RG23B1'),
('WY20230101','locy',18,'WY23A1'),
('WY20230102','Tim',19,'WY23A1'),
('WY20230103','kiky',19,'WY23A1');
insert into class
values ('WY23A1','外国语言文学23级A座1班','外国交换生组建班'),
('RG23B1','软件工程23级B座1班',''),
('RG23A1','软件工程23级A座1班',''),
('DQ23A1','电气工程及其自动化23级A座1班',''),
('DY23A1','动物医学23级A座1班','')
创建视图
单表视图
前面背景介绍,我们需要对外公布一个所有上榜学生的公示栏,我们就可以创建一个单表视图来展示。
我们需要创建一个只包含学生姓名的视图表
create view all_students as select name from students;
select * from all_students;
多表视图
根据前文背景得知,我们还需要一个开学日学生分班公示栏
我们需要创建一个包含学生学号、学生姓名、班级名称的视图表
create view students_class_table as select s_id,stu.name as student_name,cla.name as class_name
from students as stu,class as cla where stu.c_id=cla.c_id;
select * from students_class_table;
查询视图
查询视图就不用说了,就像上文那样直接查就行了
select * from students_class_table;
这样直接查,或者查特定的列
例:小花男朋友小刘都报了软工专业,但没和她分到同一个班想知道他被分去了哪个班,查条件学生名为小刘的班级名称结果
select class_name from students_class_table where student_name='小刘';
哦,很遗憾,他被分到B校区上课了,和辅导员提交调班申请吧
删除视图
既然分班公示栏已经展出,说明录取视图表已经没用了,那就删除这个视图表吧
图形操作
这种操作更加快捷
点击ok就删掉了
SQL操作
使用drop直接删
drop view all_students;
作者的话(Alvin):
本文根据原书《PostgreSql11 从入门到精通》(清华大学出版社)第10章总结整理,为提问与解答可以帮助更多人,本博客模拟GitHub的issue方案,所以私信已关,有问题请在评论区直接指正与提问,允许转发、复制或引用本文章,必须遵守开源法则注释来源与作者,感谢您的阅读。
参考资料:
1.《PostgreSql11 从入门到精通》(清华大学出版社)第10章
2.【第15节 MySQL一点就会|视图【完结篇】】
【第15节 MySQL一点就会|视图【完结篇】】
3.【什么是视图?作用是什么?】
【什么是视图?作用是什么?】