mysql第八章_mySQL教程 第8章 视图

第8章 视图

创建视图的目的

简单 隐藏数据复杂性

安全 可以对视图授权

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

创建视图

1. 创建单表视图

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

CREATE VIEW vJAVAstudent

as

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

查询视图

select * from vJAVAstudent;

da797b66329df42cd307b91601658879.png

select 姓名,×××号 from vJAVAstudent where 姓名='白安'

6732504816bea7fdcc1442cd0c4024b6.png

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`

2271338ec14e8026049dc9f3d4d12c73.png

查找各科最高分

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

ce12c96090c954c15889463c54a9c6e6.png

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

bb0c8d38c4bdcf6f902e6ae22cad45dd.png

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

2ac70854ae833e31cc039d6a2c22aa3c.png

查看视图

5. 查看视图基本信息

DESCRIBE `vStudentInfo`

509f6af036d54a2058c2b439db7db689.png

3eeeefb59df5164bb9439897796195b6.png

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

730a27b22164940b30c3e9f94f9308be.png

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

使用SQL admin 连接到Information_schema数据库

输入SELECT * FROM information_schema.views;

592f83f31c0f6d19f504749aca8c4bb2.png

e3e59b281ca3a3f3c4210df3cc9590e7.png

修改视图

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`

47008b939dfffe10b9ebf79ff1c7774d.png

给韩旭的数据结构加10分

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

查看结果

select * from `vStudentInfo`

0a1d6e3c3160ad96c18dae5f6fbf9c9b.png

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

f84d33c9c495c5aa50cbf11da6d8c304.png

5. 通过视图删除数据

delete from vJAVA where 学号='00025'

select * from vJAVA

c31b00e80ab44e197d15208a6df4e7f6.png

删除创建的视图

6. 查看创建的视图

15c87c496adec3c7f352fb178dddc964.png

7. 删除视图

drop view `vJAVA`

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

cfcccd513b05c28a0f2e91c2fa4c6cd9.png

8. 查看视图的语法

0d0301f9b8abf9fbc6a3e4d87254e11f.png

不能更新的视图

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

在定义视图的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

广告

2bcdb1f21b84b9f17209471fc1c37a85.png

91fdf55cf0088925fa90a06e92355788.png

958dbddad896bb93bd177e6aed622baa.png

09113e988fe325feace16857a0cc499b.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值