mySQL 教程 第8章 视图
创建视图的目的
简单 隐藏数据复杂性
安全 可以对视图授权
数据独立 可以屏蔽表结构变化对用户的影响,比如增加列,更改列名
创建视图
1. 创建单表视图
以下视图显示JAVA班的学生姓名、身份证号和班级。
CREATE VIEW vJAVAstudent
as
SELECT sname 姓名,cardID 身份证号,class 班级 from `TStudent` where class='JAVA'
查询视图
select * from vJAVAstudent;
select 姓名,身份证号 from vJAVAstudent where 姓名='白安'
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`
查找各科最高分
select 科目,MAX(成绩) 最高分 from `vStudentInfo` group by 科目
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
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
查看视图
5. 查看视图基本信息
DESCRIBE `vStudentInfo`
如图,双击vStudentInfo视图,可以查看创建的视图
6. 在views表中查看视图详细信息
使用SQL admin 连接到Information_schema数据库
输入SELECT * FROM information_schema.views;
修改视图
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`
给韩旭的数据结构加10分
update `vStudentInfo` set 成绩=成绩+10 where 姓名='韩旭' and 科目='数据结构'
查看结果
select * from `vStudentInfo`
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
5. 通过视图删除数据
delete from vJAVA where 学号='00025'
select * from vJAVA
删除创建的视图
6. 查看创建的视图
7. 删除视图
drop view `vJAVA`
按F5可以看到vJAVA视图已经被删除
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 作者:韩立刚