数据库视图
1.视图是数据库中的基本表中选取出来的数据组成的逻辑窗口,是基本表的部分行和列数据的组合。视图是一个虚表。数据库中只存放视图的定义,而不存放视图包含的数据,这些数据仍存放在原表中。所有基本表中的数据如果发生改变,那么从视图中出查询的数据也会发生改变,
2.创建视图
格式
create view 《视图名》 【(列名)】
as
select 语句
注意:
1)定义视图的查询语句通常不包含order by 和distinct子句, 这些子语句客放在视图查询数据的语句中。
2)定义视图时要么指定全部视图列,要么全部省略不写,只能只写视图的部分属性列。如果省略了视图的属性列名,则视图的列名与查询语句的列名相同。但是在如下三种情况下,必须明确指定组成视图的所有列名:
①select语句中的查询列不是单纯的属性名,而是函数或者表达式等无列名的列。
②多表连接是宣传了几个同名列作为视图的字段。
③需要在视图中为列选用新的更合适的列名。
数据库在执行create view 语句的结果只是保存视图的定义,并不真正执行其中的select语句。只有在对视图执行查询时,才按视图的定义从基本表中查询数据。
视图的来源可以是表,也可以是视图,还可以是两者的结合。
create view A
as
select from ,grade
from shitu s join sc on s.sno=sc.sno
3.定义带表达式的视图
在定义基本表时,为减少数据库的冗余数据,表中只存放基本数据,而基本数据经过各种计算派生的数据一般是不存储的。但是因为视图中的数据并不实际存储,所以定义视图时可以根据需要设置一些派生属性列,在这些派生属性列中保存经过计算的值,这些配送属性由于在基本表中并不实际存在,因此被称作虚拟列。包含虚拟列的视图也被称作带表达式的视图、
create view V_BirthYear(sno,sname,BirthYear)
as
select sno,sname, 2015-sage
from student
4.汉分组统计信息的视图
含有group by ,这样的视图只能查询,不能修改数据
create view S_G(sno, AvgGrade )
as
select sno,avg(Grade) from sc
group by sno
注意:如果查询语句中的选择列表包含表达式或者统计函数,而且在查询语句中也没有为这样的列指定列名,则在定义视图的查询语句中必须要指定视图属性列的名字。