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
mySQL 教程 第8章 视图的更多相关文章
- mySQL 教程 第7章 存储过程和函数
存储过程和存储函数 MySQL的存储过程(stored procedure)和函数(stored function)统称为stored routines. 1. MySQL存储过程和函数的区别 函数只 ...
- mySQL 教程 第4章 数据查询
mySQL运算符 这些运算符在SQL查询中用得到. 算数运算符 + 加 - 减 * 乘 / DIV 除 % MOD 取余数 比较运算符 = 等于 <> != 不等于 < <= ...
- mySQL 教程 第3章 数据类型和数据完整性
准备数据库 创建练习数据库,以下实验都是在这个数据库中完成. 练习1:比较各种数值型 create table tmp1 ( id INT, name VARCHAR(25), deptId deci ...
- mySQL 教程 第2章 安装和介绍mySQL
设置mySQL字符集 支持中文的字符集是utf8,该设置可以更改mySQL配置文件进行全局设置,也可以针对数据库设置,也可以针对表设置,也可以针对列设置.字符集更改后新插入的数据生效,对以前不生效. ...
- mySQL教程 第1章 数据库设计
E-R设计 很多同学在学SQL语句时,觉得非常困难,那是因为你在学一个你根本不了解的数据库,数据库中的表不是你设计的,表与表之间的关系你不明白.因此在学SQL语句之前,先介绍一下数据库设计. 下面举例 ...
- mySQL 教程 第5章 插入 更新与删除数据
使用SQL Manager管理工具连接到schoolDB.由于三张表都设置了主键,因此,以下练习中插入的记录,主键不能重. 插入数据 1. 练习:为表的所有字段插入数据 为表中所有字段插入数据,可以不 ...
- 转-MySQL教程-写的很详细,赞一个
原帖地址:https://www.w3cschool.cn/mysql/,谢谢原帖大人 MySQL是什么? MySQL安装 MySQL示例数据库 MySQL导入示例数据库 MySQL基础教程 MySQ ...
- 2017.2.16 开涛shiro教程-第十七章-OAuth2集成(一)服务器端
原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 开涛shiro教程-第十七章-OAuth2集成 1.OAuth2介 ...
- Cobalt Strike系列教程第七章:提权与横向移动
Cobalt Strike系列教程分享如约而至,新关注的小伙伴可以先回顾一下前面的内容: Cobalt Strike系列教程第一章:简介与安装 Cobalt Strike系列教程第二章:Beacon详 ...
随机推荐
- Eclipse SVN 合并分支/主干
可以从主干合并到分支,也可以从分支合并到主干,根据需要可以选择合适的选项,如下图:
- CSS3提供的transition动画
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> < ...
- vue打包后图片找不到情况
打包之前需要修改如下配置文件: 配置文件一:build>>>utils.js (修改publicPath:"../../" , 这样写是处理打包后找不到静态文件( ...
- 快速切题 sgu117. Counting 分解质因数
117. Counting time limit per test: 0.25 sec. memory limit per test: 4096 KB Find amount of numbers f ...
- ural1469
题解: 从左往右加入每一个点 判断一下和,pre,nxt是否相交 删除得时候也要判断 代码: #pragma GCC optimize(2) #include<cstdio> #inclu ...
- request应用实例
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...
- IOS多线程编程:概述
什么是多线程 多线程是一个比较轻量级的方法来实现单个应用程序内多个代码执行路径.从技术角度来看,一个线程就是一个需要管理执行代码的内核级和应用级数据结构组合.内核级结构协助调度线程事件,并抢占式调度一 ...
- vee-validate 中文配置报错及自定义规则 报错.updateDictionary/.addlocale is not a function
原因由于vee-validate版本更新的问题导致的. 1. 原因分析: a 新版vee-validate的语言配置方法变化了, Validator.localize('zh_CN', zh_CN) ...
- 逆向路由器固件之解包 Part1
这个系列的文章以逆向路由器固件的方式来挖掘路由器中存在的漏洞. 本篇文章主要以介绍解包固件工具为主.文中演示用的固件可以在这里下载.由于针对设备的攻击越来越多,很多厂商把不提供固件下载作为一种安全策略 ...
- 按照Right-BICEP要求设计四则运算2程序的单元测试用例
Right——结果是否正确? B——是否所有的边界条件都是正确的? I——能查一下反响关联吗? C——能用其它手段交叉检查一下吗? E——你是否可以强制错误条件发生? P——是否满足性能要求? 测试计 ...