开发者社区> 技术小阿哥> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

mySQL教程 第8章 视图

简介:
+关注继续查看

创建视图的目的

简单 隐藏数据复杂性

安全 可以对视图授权

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

创建视图

1. 创建单表视图

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

CREATE VIEW vJAVAstudent

as

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

查询视图

select * from vJAVAstudent;

clip_image001

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

clip_image002

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`

clip_image003

查找各科最高分

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

clip_image004

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

clip_image005

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

clip_image006

查看视图

5. 查看视图基本信息

DESCRIBE `vStudentInfo`

clip_image007

clip_image008

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

clip_image009

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

使用SQL admin 连接到Information_schema数据库

输入SELECT * FROM information_schema.views;

clip_image010

clip_image011

修改视图

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`

clip_image012

给韩旭的数据结构加10分

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

查看结果

select * from `vStudentInfo`

clip_image013

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

clip_image014

5. 通过视图删除数据

delete from vJAVA where 学号='00025'

select * from vJAVA

clip_image015

删除创建的视图

6. 查看创建的视图

clip_image016

7. 删除视图

drop view `vJAVA`

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

clip_image017

8. 查看视图的语法

clip_image018

不能更新的视图

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

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




本文转自 onesthan 51CTO博客,原文链接:http://blog.51cto.com/91xueit/1137974,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
centos7 安装与卸载 Mysql 5.7.27(详细完整教程)
centos7 安装与卸载 Mysql 5.7.27(详细完整教程)
0 0
软件测试|MySQL安装最全教程
软件测试|MySQL安装最全教程
0 0
MySQL Windows、Ubuntu安装及卸载教程
MySQL Windows、Ubuntu安装及卸载教程
0 0
MySQL脚本命令数据简单增删改操作教程
MySQL脚本命令数据简单增删改操作教程
0 0
MySQL 5.7.27详细下载安装配置教程
MySQL 5.7.27详细下载安装配置教程
0 0
linux debian系统使用mysql教程
linux debian系统使用mysql教程
0 0
MySQL数据库快速入门到精通(超详细保姆级,建议收藏)这可能是目前最适合你的教程,从基础语法到实例演示。
此文章旨在为需要掌握快速开发和复习MySQL的同学所准备,您完全可以把此文章当作参考文档来使用,本文将尽量精简,使您快速的理解和掌握语法。
0 0
【MySQL】数据库函数通关教程下篇(窗口函数专题)(下)
文章目录 写在前面 6 窗口函数 6.1 窗口函数概述 6.2 序号函数 6.2.1 ROW_NUMBER() 6.2.2 RANK() 6.2.3 DENSE_RANK() 6.3 开窗聚合函数 6.4 分布函数 6.4.1 CUME_DIST() 6.4.2 PERCENT_RANK() 6.5 前后函数-LAG与LEAD 6.6 头尾函数 写在最后
0 0
【MySQL】数据库函数通关教程下篇(窗口函数专题)(上)
文章目录 写在前面 6 窗口函数 6.1 窗口函数概述 6.2 序号函数 6.2.1 ROW_NUMBER() 6.2.2 RANK() 6.2.3 DENSE_RANK() 6.3 开窗聚合函数 6.4 分布函数 6.4.1 CUME_DIST() 6.4.2 PERCENT_RANK() 6.5 前后函数-LAG与LEAD 6.6 头尾函数 写在最后
0 0
【MySQL】数据库函数通关教程上篇(聚合、数学、字符串、日期、控制流函数)(下)
文章目录 写在前面 1 聚合函数 1.1 GROUP_CONCAT() 1.2 其他聚合函数 2 数学函数 3 字符串函数 4 日期函数 4.1 常见日期函数与使用 4.2 日期格式 5 控制流函数 5.1 if逻辑判断语句 5.2 case when语句
0 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
让 MySQL 原生分布式触手可及
立即下载
好的 MySQL 兼容可以做到什么程度
立即下载
云数据库RDS MySQL从入门到高阶
立即下载