A.使用视图前,必须先创建视图,并且遵守一下原则。
a.只有在当前数据库中才能创建视图,视图命名必须遵循标识符规则。
b.不能将规则、默认值或触发器与视图相关联。
c.不能再视图上建立任何索引。
--创建视图(create view必须是第一条语句)
--例6.1 在stsc数据库中创建st_comm视图,包括学号、姓名、课程名、成绩、专业,且专业为通信
use stsc
go
create view st_comm
AS
(
select student.stno,student.stname,course.cname,score.grade,student.speciality
from student,course,score
where student.stno=score.stno AND course.cno=score.cno AND student.speciality='通信'
)
go
B.查询视图
使用select语句。使用select语句对视图进行查询,举例如下:
--例6.2 查询视图st_comm
use stsc
select * from st_comm
go
--例6.3查询通信专业学生的姓名、课程名、成绩
use stsc
select stname,cname,grade
from st_comm
go
--例6.4 查询学生平均成绩在85分以上的学号和平均成绩
--use stsc
--select stno AS '学号',AVG(grade)AS '平均成绩'
--from score
--group by stno
--go
use stsc
select * from score
go
use stsc
go
create view sc_avg(stno,avg_grade)
AS
(
select stno,AVG(grade)
from score
group by stno
)
go
use stsc
select *
from sc_avg
where avg_grade>=85
go
C.更新、插入、修改、删除视图(只有select里没有聚合函数才能更新)。由于视图是不存储数据的虚表。因此对视图的更新最终转换为对基表的更新。举例如下:
--例6.5 在stsc数据库中,以student表为基表,创建专业为计算机的可更新视图st_cp
use stsc
go
create view st_cp
AS
(
select * from student
where speciality='计算机'
)
go
--查询
use stsc
select * from st_cp
go
--例6.6 向st_cp中插入一条记录
use stsc
insert into st_cp values('122009','董智强','男','1992-11-23','计算机','50')
go
use stsc
select * from st_cp
go
--例6.7 将st_cp中学号为122009的学生的总学分加2
use stsc
update st_cp set tc=tc+2
where stno='122009'
go
use stsc
select * from st_cp
go
--例6.8删除st_cp中学号为122009的记录
use stsc
delete from st_cp
where stno='122009'
go
use stsc
select * from st_cp
go
D.视图定义之后,可以修改视图定义或重命名视图,而无需删除并重新创建视图,举例如下:
--例6.9 将st_comm进行修改,取消专业为通信的要求
use stsc
go
alter view st_comm
AS
(
select student.stno,student.stname,course.cname,score.grade,student.speciality
from student,score,course
where student.stno=score.stno AND course.cno=score.cno
)
go
use stsc
select * from st_comm
go
--例6.10 将视图st_view1重命名为st_view2
use stsc
go
create view st_view1
AS
(
select student.stno,student.stname,course.cname,score.grade
from student,course,score
where student.stno=score.stno AND course.cno=score.cno
)
go
use stsc
go
exec sp_rename 'st_view1','st_view2'
go
E.查看视图信息包括查看视图怎么从基表中引用、查看视图定义等。
--例6.11 查看视图st_comm的定义信息
use stsc
go
exec sp_helptext st_comm
go
F.删除视图
--例6.12 将st_view2删除
use stsc
drop view st_view2
go