数据库原理与应用-----视图

1.1定义

视图是从一个或多个表中导出的虚拟表

1.2创建试图的目的

  • 简单:隐藏数据的复杂性

  • 安全:可以对试图进行授权

  • 数据独立:可以屏蔽表结构的变化对用户产生的影响

1.3 创建方法

语法:

create view 视图名 as SQL语句;

示例:----基于单表的视图

create view rgzn_view as select * from tstudent where class='人工智能';

示例:----基于多表的视图

create view studentinfo as select s.studentid 学号,s.sname 姓名,s.cardid 身份证号,sub.subjectname科目名称,sc.mark成绩 from tstudent s join tscore sc on s.studentid = sc.StudentID join tsubject sub on sub.subjectid = sc.subJectID;

注意:我们可以将生成的视图当成表来使用。

select * from vstudentinfo;-- 开发者只需要此句话,即实现以它想要的数据

创建视图

CREATE VIEW studentMark
(
AS
SELECT a.studentid 学号,sname 姓名,maxk 分数,subJectName 学科
FROM TStudent a JoIN TScore b ON a.studentid=b.studentid
JOIN TSubject c oN b.subjectid=c.subjectid
);

创建行列转换视图

select 学号,姓名,
sum(case 科目 when'.net开发' then 成绩 end) net开发,
sum(case 科目 when'JAVA开发' then 成绩 end )JAVA开发,
sum(case 科目 when'人工智能' then 成绩 end)人工智能
from studentgrade
group by 学号,姓名;

示例:查询各科的最高分?

-- 传统方式

select sub.subjectname 科目名称,max(sc.mark)最高分 from tsubject sub join tscore sc on sub.subjectid=sc.subjectid group by sub. subjectname;

-- 视图方式

select 科目名称,max(成绩) from vstudentinfo group by 科目名称;

示例:查询学生的学号、姓名、分数和学科

create view studentmark as ( select s.studentid 学号,s.sname 姓名,sc.mark 分数,sub.subjectname学科 from student s,tsubject sub,tscore sc where s.studentid=sc.studentid and sub.subjectid = sc.subjectid );

查看该视图

select * from studentmark;

修改视图

alter view studentgrade
as
(
select s.studentid 学号,s.sname 姓名,sub.subjectname 科目,s.email 电子邮箱,sc.mark 成绩
from tstudent s,tsubject sub,tscore sc
where s.studentid=sc.studentid and sub.subjectid=sc.subJectID
);

删除视图

drop view studentgrade;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值