mySQL教程 第8章 视图

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

创建视图的目的

简单 隐藏数据复杂性

安全 可以对视图授权

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

创建视图

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,如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
13天前
|
存储 关系型数据库 MySQL
mysql安装教程mac
【4月更文挑战第21天】
|
13天前
|
关系型数据库 MySQL 网络安全
|
13天前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:视图之美,简化查询、提升效率的数据库利器(14)
轻松入门MySQL:视图之美,简化查询、提升效率的数据库利器(14)
|
13天前
|
存储 关系型数据库 MySQL
MySQL中如何创建一个视图
MySQL中如何创建一个视图
23 0
|
6天前
|
关系型数据库 MySQL 索引
【MySQL】视图 -- 详解
【MySQL】视图 -- 详解
|
6天前
|
存储 关系型数据库 MySQL
【MySQL】在 Centos7 环境安装 MySQL -- 详细完整教程
【MySQL】在 Centos7 环境安装 MySQL -- 详细完整教程
|
13天前
|
存储 关系型数据库 MySQL
mysql视图
mysql视图
|
2天前
|
存储 Ubuntu 关系型数据库
Ubuntu 20.04 卸载与安装 MySQL 5.7 详细教程
该文档提供了在Ubuntu上卸载和安装MySQL 5.7的步骤。首先,通过`apt`命令卸载所有MySQL相关软件包及配置。然后,下载特定版本(5.7.32)的MySQL安装包,解压并安装所需依赖。接着,按照特定顺序安装解压后的deb包,并在安装过程中设置root用户的密码。安装完成后,启动MySQL服务,连接数据库并验证。最后,提到了开启GTID和二进制日志的配置方法。
|
13天前
|
关系型数据库 MySQL
MySQL第四战:视图以及常见面试题(上)
MySQL第四战:视图以及常见面试题(上)
|
13天前
|
SQL 关系型数据库 MySQL
MySQL最新版8.1.0安装配置教程
本文章,是对自己在安装最新版MySQL最新版8.1.0安装配置的一个详细过程吧,中间也有很多不清楚的地方,但是经过自己的多次对,工具环境以及软件环境的配置,现在对于这个的安装也算得心应手吧,不仅仅是一种总结,更是对自己经验的一种积累.