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,李明)

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所创建的视图中直接修改,要求内容改为学生的学号、姓名、课程号、课程名和成绩。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

某人辛木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值