sqlserver的视图操作之数据库实验

建立系别号为01的学生的视图;

create view department
as select *
from student
where clno='01';

建立课程号为001的视图,输出选修该门课的学生学号、姓名、课程名和成绩;

create view class_001
as select sc.sno,sname,cname,score
from student,sc,course
where course.cno='001' and course.CNo=sc.CNo and
sc.SNo=student.SNo;

使用2建立的视图查询课程号为001的课程考试不及格的学生名字;

select sname
from class_001
where score<60;

建立姓王的学生的视图,输出学号,姓名,要求后面使用 WITH CHECK OPTION【WITH CHECK OPTION表示用视图进行更新(UPDATE)、插入(INSERT)和删除(DELECT)操作时,要保证更新的元组满足视图定义中的谓词条件,即映像语句中的条件表达式】;

create view xing_wang
as select sno,sname
from Student
where sname like '王%'
with check option;

建立姓王的学生的视图,输出学号、姓名,要求不使用WITH CHECK OPTION;

create view xing_wang2
as select sno,sname
from Student
where sname like '王%';

分别向4建立的视图插入(00051,李明)这个记录,和5建立的视图插入(00052,李明),然后查看有什么区别,同时查看一下表Student的变化和两个视图的变化;另外再向4建立的视图插入(00053,王明),查看一下表Student的变化和两个视图的变化;

向4建立的视图插入(00051,李明)

扫描二维码关注公众号,回复: 15589474 查看本文章

insert 
into xing_wang 
values('00051','李明');--失败
-- 试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了 WITH CHECK OPTION,而该操作的一个或多个结果行又不符合 CHECK OPTION 约束。

向5建立的视图插入(00052,李明)

insert 
into xing_wang2 
values('00052','李明');--成功

向4建立的视图插入(00053,王明)

insert 
into xing_wang2 
values('00053','王明');--成功

建立张三老师所授课程的课程名、选修学生学号和成绩的视图;

create view zhangsan_t
as select course.cname,sc.SNo,sc.Score
from course,sc,Teacher
where course.CTno=teacher.Tno and teacher.TName='张三' and course.CNo=sc.CNo;

根据7所建视图看能不能完成以下操作:(1)将其中一名学生成绩加1;(2)删除一行数据;(3)插入一行数据;

--(1)将其中一名学生成绩加1;

update zhangsan_t
set Score = Score+1
where sno='00001';

--(2)删除一行数据;

delete 
from zhangsan_t
where sno='00002';
--视图或函数 'zhangsan_t' 不可更新,因为修改会影响多个基表。

--(3)插入一行数据;

insert
into zhangsan_t
values('数据结构','00007','77');
--视图或函数 'zhangsan_t' 不可更新,因为修改会影响多个基表。

建立一个学生的学号和平均成绩的视图;

create view stu_sno_score
as select sno,avg(score) 平均成绩--创建视图或函数失败,因为没有为列 2 指定列名。
from sc group by sno;

删除1创建的视图;

drop view department;

创建一个学生学号、学生姓名和每个学生已修总学分的视图,并在创建时对该视图加密;(提示:用WITH ENCRYPTION);

create view stu_message2 WITH ENCRYPTION
as select Student.sno,sname,总学分
    from student,(select sno,sum(course.ccredits) 总学分 
        from sc,course 
        where sc.CNo=course.CNo 
        group by sno) sc1
    where student.SNo=sc1.SNo;

使用存储过程sp_helptext来查看9和11所创建的视图;

EXEC sp_helptext'stu_sno_score';--9

EXEC sp_helptext'stu_message';--11

使用窗口在9所创建的视图中直接修改,要求内容改为学生的学号、姓名、课程号、课程名和成绩。

猜你喜欢

转载自blog.csdn.net/m0_64206989/article/details/129956446