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;
标签:studentid,sub,数据库,视图,-----,subjectid,sc,select
From: https://blog.csdn.net/2301_78884634/article/details/144223698