创建视图的目的

简单 隐藏数据复杂性

安全 可以对视图授权

数据独立 可以屏蔽表结构变化对用户的影响,比如增加列,更改列名

创建视图

1. 创建单表视图

以下视图显示JAVA班的学生姓名、身份证号和班级。

CREATE VIEW vJAVAstudent

as

SELECT sname 姓名,cardID 身份证号,class 班级 from `TStudent` where class='JAVA'

查询视图

select * from vJAVAstudent;

mySQL 教程 第8章 视图

select 姓名,身份证号 from vJAVAstudent where 姓名='白安'

mySQL 教程 第8章 视图

2. 在多表上创建视图

创建一个视图,展示学生学号 姓名 身份证号 班级 科目 成绩

create VIEW vStudentInfo

as

select a.studentid 学号,sname 姓名,cardID 身份证号,class 班级,subjectName 科目,mark 成绩 from `TStudent` a join `TScore` b on a.`StudentID`=b.`StudentID` join `TSubject` c on b.`subJectID`=c.`subJectID`

查询视图

select * from `vStudentInfo`

mySQL 教程 第8章 视图

查找各科最高分

select 科目,MAX(成绩) 最高分 from `vStudentInfo` group by 科目

mySQL 教程 第8章 视图

3. 创建视图

该视图显示学生学号 姓名 分数 和学科

CREATE VIEW `studentMark`

AS

(

SELECT a.studentid 学号,sname 姓名,mark 分数,subJectName 学科

FROM TStudent a JOIN TScore b ON a.studentid=b.studentid

JOIN TSubject c ON b.subjectid=c.subjectid

);

查询该视图

select * from studentMark

mySQL 教程 第8章 视图

4. 行列转换视图

以以上视图为表,创建行列转换视图

CREATE VIEW Vmark

AS

(

SELECT 学号,姓名,

AVG(CASE 学科 WHEN '计算机网络' THEN 分数 END) 计算机网络,

AVG(CASE 学科 WHEN 'JAVA开发' THEN 分数 END) JAVA开发,

AVG(CASE 学科 WHEN '数据结构' THEN 分数 END) 数据结构

FROM `studentMark`

GROUP BY 学号

);

查询Vmark视图

select * from Vmark

mySQL 教程 第8章 视图

查看视图

5. 查看视图基本信息

DESCRIBE `vStudentInfo`

mySQL 教程 第8章 视图

mySQL 教程 第8章 视图

如图,双击vStudentInfo视图,可以查看创建的视图

mySQL 教程 第8章 视图

6. 在views表中查看视图详细信息

使用SQL admin 连接到Information_schema数据库

输入SELECT * FROM information_schema.views;

mySQL 教程 第8章 视图

mySQL 教程 第8章 视图

修改视图

1. 使用create or replace修改视图

给现有视图添加一列email

create OR REPLACE VIEW vStudentInfo

as

select a.studentid 学号,sname 姓名,cardID 身份证号,email 邮箱,class 班级,subjectName 科目,mark 成绩 from `TStudent` a join `TScore` b on a.`StudentID`=b.`StudentID` join `TSubject` c on b.`subJectID`=c.`subJectID`

2. 使用ALTER修改视图

给现有视图去掉身份证号列

ALTER VIEW vStudentInfo

as

select a.studentid 学号,sname 姓名,email 邮箱,class 班级,subjectName 科目,mark 成绩 from

`TStudent` a join `TScore` b on a.`StudentID`=b.`StudentID` join `TSubject` c on b.`subJectID`=c.`subJectID`

通过视图更改数据

通过视图来插入、更新、删除表中的数据,都是修改的基本表上进行更新

3. 通过视图更改数据

select * from `vStudentInfo`

mySQL 教程 第8章 视图

给韩旭的数据结构加10分

update `vStudentInfo` set 成绩=成绩+10 where 姓名='韩旭' and 科目='数据结构'

查看结果

select * from `vStudentInfo`

mySQL 教程 第8章 视图

4. 通过视图插入数据

下面视图能够插入数据

CREATE VIEW vJAVA

as

select studentID 学号,sname 姓名,sex 性别,email 邮箱,class 班级 from `TStudent` where class='JAVA'

通过视图插入记录

INSERT vJAVA values ('00025','姚帅','男','yaoshuai@onest.net','JAVA')

select * from vJAVA

mySQL 教程 第8章 视图

5. 通过视图删除数据

delete from vJAVA where 学号='00025'

select * from vJAVA

mySQL 教程 第8章 视图

删除创建的视图

6. 查看创建的视图

mySQL 教程 第8章 视图

7. 删除视图

drop view `vJAVA`

按F5可以看到vJAVA视图已经被删除

mySQL 教程 第8章 视图

8. 查看视图的语法

mySQL 教程 第8章 视图

不能更新的视图

视图中不包含基表中被定义为非空的列

在定义视图的select语句后的字段列表中使用了数学表达式

在定义视图的select语句后的字段使用聚合函数

在定义视图的select语句中使用了distinct union top group by 或having

课下作业

创建一个视图 studentMark

select sname 姓名, subJectName 学科,mark 分数 from TStudent a join TScore b

on a.studentid=b.studentid join TSubject c on b.subjectid=c.subjectid

再创建一个视图Vmark,将studentMark进行行列转换

姓名 计算机网络 JAVA开发 数据结构

韩立刚 89 78 89

王瑞斯 90 78 76

来源: 51cto   作者:韩立刚

相关文章:

  • 2022-12-23
  • 2021-09-10
  • 2021-10-14
  • 2022-12-23
  • 2021-06-10
  • 2021-12-26
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-08-25
  • 2022-12-23
  • 2022-12-23
  • 2021-08-11
  • 2022-01-05
  • 2022-01-12
相关资源
相似解决方案