创建视图的目的

简单 隐藏数据复杂性

安全 可以对视图授权

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

创建视图

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

mySQL 教程 第8章 视图的更多相关文章

  1. mySQL 教程 第7章 存储过程和函数

    存储过程和存储函数 MySQL的存储过程(stored procedure)和函数(stored function)统称为stored routines. 1. MySQL存储过程和函数的区别 函数只 ...

  2. mySQL 教程 第4章 数据查询

    mySQL运算符 这些运算符在SQL查询中用得到. 算数运算符 + 加 - 减 * 乘 / DIV 除 % MOD 取余数 比较运算符 = 等于 <> != 不等于 < <= ...

  3. mySQL 教程 第3章 数据类型和数据完整性

    准备数据库 创建练习数据库,以下实验都是在这个数据库中完成. 练习1:比较各种数值型 create table tmp1 ( id INT, name VARCHAR(25), deptId deci ...

  4. mySQL 教程 第2章 安装和介绍mySQL

    设置mySQL字符集 支持中文的字符集是utf8,该设置可以更改mySQL配置文件进行全局设置,也可以针对数据库设置,也可以针对表设置,也可以针对列设置.字符集更改后新插入的数据生效,对以前不生效. ...

  5. mySQL教程 第1章 数据库设计

    E-R设计 很多同学在学SQL语句时,觉得非常困难,那是因为你在学一个你根本不了解的数据库,数据库中的表不是你设计的,表与表之间的关系你不明白.因此在学SQL语句之前,先介绍一下数据库设计. 下面举例 ...

  6. mySQL 教程 第5章 插入 更新与删除数据

    使用SQL Manager管理工具连接到schoolDB.由于三张表都设置了主键,因此,以下练习中插入的记录,主键不能重. 插入数据 1. 练习:为表的所有字段插入数据 为表中所有字段插入数据,可以不 ...

  7. 转-MySQL教程-写的很详细,赞一个

    原帖地址:https://www.w3cschool.cn/mysql/,谢谢原帖大人 MySQL是什么? MySQL安装 MySQL示例数据库 MySQL导入示例数据库 MySQL基础教程 MySQ ...

  8. 2017.2.16 开涛shiro教程-第十七章-OAuth2集成(一)服务器端

    原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 开涛shiro教程-第十七章-OAuth2集成 1.OAuth2介 ...

  9. Cobalt Strike系列教程第七章:提权与横向移动

    Cobalt Strike系列教程分享如约而至,新关注的小伙伴可以先回顾一下前面的内容: Cobalt Strike系列教程第一章:简介与安装 Cobalt Strike系列教程第二章:Beacon详 ...

随机推荐

  1. Spring Cloud Edgware之后版本 Zipkin+Kafka整合

    zipkin服务器端 1.依赖 <!-- zipkin server --> <dependency> <groupId>io.zipkin.java</gr ...

  2. 使用SAE(VAE)检测信用卡欺诈——感觉误报率还是比较高啊 70%+误报 蛋疼

    from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScale ...

  3. 信号处理函数的返回sigsetjmp/siglongjmp

    由于在信号处理期间自动屏蔽了正在被处理的信号,而使用setjmp/longjmp跳出信号处理程序时又不会自动将 信号屏蔽码修改会原来的屏蔽码,从而引起该信号被永久屏蔽. 可以使用sigsetjmp/s ...

  4. spring boot 学习(四)Druid连接池的使用配置

    Druid介绍 Druid是一个JDBC组件,druid 是阿里开源在 github 上面的数据库连接池,它包括三部分: * DruidDriver 代理Driver,能够提供基于Filter-Cha ...

  5. cas 认证管理器

    CAS-默认的认证管理器:AuthenticationManagerImpl <bean id="authenticationManager" class="org ...

  6. Mysql Innodb 表碎片整理

    一.为什么会产生碎片 简单的说,删除数据必然会在数据文件中造成不连续的空白空间,而当插入数据时,这些空白空间则会被利用起来.于是造成了数据的存储位置不连续,以及物理存储顺序与理论上的排序顺序不同,这种 ...

  7. Spring学习笔记之The IoC container

    IoC is also known as dependency injection (DI). 这是一个过程?什么样的过程呢?对象自己定义它的依赖关系,这意味着,那些他们依赖的对象,只能通过构造函数参 ...

  8. L1-013 计算阶乘和

    对于给定的正整数N,需要你计算 S=1!+2!+3!+...+N!. 输入格式: 输入在一行中给出一个不超过10的正整数N. 输出格式: 在一行中输出S的值. 输入样例: 3 输出样例: 9   #i ...

  9. 5.1 socket编程、简单并发服务器

    什么是socket? socket可以看成是用户进程与内核网络协议栈的编程接口.是一套api函数. socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机间的进程间通信. 工业上使用的为t ...

  10. python perlin noise

    python 利用 noise 生成纹理. # -*- coding: utf-8 -*- """ Created on Mon Apr 23 20:04:41 2018 ...