MySQL数据库12——视图(VIEW)
视图概念
视图是一个虚拟表,称其为虚拟表的原因是:视图内的数据并不属于视图本身,而属于创建视图时用到的基本表。可以认为,视图是一个表中的数据经过某种筛选后的显示方式;或者多个表中的数据经过连接筛选后的显示方式。
视图由一个预定义的查询(SELECT语句)组成,可以像基本表一样用于SELECT语句中。如果视图满足一定条件,还可以用在INSERT、UPDATE和DELETE语句中,对视图所调用的基本表进行插入、更新和删除数据操作。
视图案例
使用一个例题引入视图概念,并让读者初步了解视图的作用、定义视图的方法和使用视图的方法。
例 查询“心理学”考试成绩大于等于90的学生的“学号”、“姓名”和“所属院系”三个字段。
分析:“心理学”是course表中“课名”字段的值,考试成绩是score表中“考试成绩”字段的值,而“学号”、“姓名”和“院系”是student表中的字段。因此想要得到本例要求的结果,则必须对course、score和student三个表进行连接查询,如图 所示。

SELECT student.ID AS 学号, student.name AS 姓名, student.institute AS 所属院系
FROM student, course, score
WHERE course.course='心理学' AND score.result1>90 AND student.ID=score.s_id AND course.ID= score.c_id;

如果用户经常使用上面的查询,并且每次都要编写这一复杂的SELECT语句,那会很麻烦。如果将上面的SELECT语句保存到数据库里,就是视图。
视图里存放了SELECT语句,而并非是查询结果。每次在SQL语句中使用视图,其实就是在执行视图内存放的SELECT语句,因此通过视图总能够得到最新的数据。
例如 定义一个视图vw1,将上例的SELECT语句存放到该视图内。
CREATE VIEW vw1 AS SELECT student.ID , student.name , student.institute
FROM student,course,score WHERE course.course='心理学'
AND score.result1>90 AND student.ID=score.s_id AND course.ID= score.c_id;
视图被定义后可以像基本表一样使用。例如,下面的例题在SELECT语句中使用了视图vw1。
例 在视图vw1上运行一个简单查询。
SELECT * FROM college.vw1;

使用视图的原因:
(1)能够简化用户的操作
(2)能使用户以多种角度观察同一个数据库
(3)视图对重构数据库提供了一定程度的逻辑独立性
(4)能够对机密数据提供安全保护
因为上述原因,数据库操作中经常使用视图。但使用视图为人们带来好处的同时,也带来了一些隐患。因此使用视图前,应当注意以下问题。
(1)改变基本表的结构后应当删除视图并重建视图。视图不能被修改,因此如果要对视图定义进行改变需要先删除再重建它。
(2)删除基本表时应当删除视图。视图本身没有数据,其数据都是基本表中的数据,当删除了基本表后,再运行视图时会产生错误信息。
(3)潜在的复杂性带来的性能下降问题。如果定义视图的SELECT语句非常复杂,例如连接了多个表或者嵌套了视图,则数据库系统除了执行访问视图的SELECT语句以外,还要执行定义视图的复杂SELECT语句,所以导致了系统性能下降。
视图的规则和限制
不同的数据库系统,对创建视图有不同的限制,所以在创建使用视图之前,应当查看具体数据库系统的帮助文档。下面整理了创建使用视图的一些较常见的规则和限制。
创建视图的SQL语句
下面通过例题,具体说明创建视图的SQL语句的简单用法。
例 创建视图vw_ boy,它用于将表student中全部男生的信息显示出来。并使用视图vw_boy查询计科系的男生。
CREATE VIEW vw_boy AS
SELECT * FROM student
WHERE sex='男';
下面的语句用来显示计科系的男生。
SELECT * FROM vw_boy
WHERE institute='计科系';
例 创建一个基于视图vw_boy的视图vw_boy_computer,用于查询计科系男生的信息。
CREATE VIEW vw_boy_computer AS
SELECT * FROM vw_boy
WHERE institute='计科系';
利用视图提高数据安全性
1、隐藏列数据
有时需要将表中的某些列隐藏起来,只显示指定的列,这时可以使用视图达到这种目的。具体方法如下面的例题所示。
例 创建一个只能查看“学号”、“姓名”和“性别”三个列的视图vw_student1。
CREATE VIEW vw_student1 AS
SELECT ID AS 学号, name AS 姓名, sex AS 性别
FROM student;
2、隐藏行数据
下面学习通过视图只显示指定条件的行数据,而隐藏其它数据的方法。
例 创建一个只能查看计科系学生信息的视图vw_student2。
CREATE VIEW vw_student2 AS
SELECT * FROM student
WHERE institute='计科系';
利用视图得到汇总数据
可以使用视图对表中的数据进行及时汇总。这样通过对视图进行简单查询就可以得到复杂的汇总数据。而且,当基本表中的底层数据被改变时,通过视图得到的永远是最新的数据。
例 创建一个视图vw_student3,显示每个不同院系的学生人数。
CREATE VIEW vw_student3 AS
SELECT institute AS 所属院系, COUNT(*) AS 人数
FROM student GROUP BY institute;
使用视图查询汇总数据时,即使基本表中的数据改变了,视图也总能得到最新的信息,因为它每次都运行定义该视图的SELECT语句,而并非是将以前的查询结果显示出来。
利用视图简化计算字段的使用
使用视图还可以简化计算字段的使用。下面通过一个例题进行详细说明。
例 查询25岁~30岁之间(包含25岁,不包含30岁)的学生和33岁以上(包含33岁)的学生的姓名和年龄,并按年龄降序排序。
在student表中只有“出生日期”列,而并没有“年龄”列,所以必须通过对“出生日期”列进行计算后得出学生的“年龄”。下面先创建一个有年龄列的视图,然后对视图进行简单查询。
CREATE VIEW vw_age AS
SELECT name AS 姓名, TIMESTAMPDIFF(YEAR, birthday, CURDATE()) AS 年龄
FROM student;
查询:
SELECT * FROM vw_age
WHERE 年龄>20 or 年龄<=18
ORDER BY 年龄 DESC;
本例中,如果不使用视图,则其查询语句不仅会显得很复杂,而且键盘输入量也会大大增加,例如下面的语句。
SELECT name AS 姓名,TIMESTAMPDIFF(YEAR, birthday, CURDATE()) AS 年龄
FROM student
WHERE TIMESTAMPDIFF(YEAR, birthday, CURDATE())>=20 OR TIMESTAMPDIFF(YEAR, birthday, CURDATE())<=18
ORDER BY 年龄 DESC;
利用视图简化多表连接
例 查询“教育学”考试成绩大于80的学生的“学号”、“姓名”和“所属院系”三个列。
为了让视图更具通用性,在此创建一个只是连接三个基本表相关列数据的视图。
CREATE VIEW vw_student_score AS
SELECT student.ID AS 学号, student.name AS 姓名, student.institute AS 所属院系,course.course AS 课名,score.result1 AS 考试成绩
FROM student, course, score
WHERE student.ID=score.s_id AND course.ID= score.c_id ;
然后查询80分之上的:
SELECT 学号,姓名,所属院系
FROM vw_student_score
WHERE 课名='教育学' AND 考试成绩>80;
然后需要查看所有学生的平均考试成绩,查询结果按“学号”升序排序。
SELECT 学号,姓名, AVG(考试成绩) AS 平均考试成绩
FROM vw_student_score
GROUP BY 学号,姓名
ORDER BY 平均考试成绩;
视图删除
例 从数据库中删除视图vw1。
DROP VIEW vw1
相关文章:
MySQL数据库12——视图(VIEW)
视图概念 视图是一个虚拟表,称其为虚拟表的原因是:视图内的数据并不属于视图本身,而属于创建视图时用到的基本表。可以认为,视图是一个表中的数据经过某种筛选后的显示方式;或者多个表中的数据经过连接筛选后的显示方…...
第四代英特尔至强重磅发布,芯片进入下半场:软硬加速、绿色可持续
编辑 | 宋慧 出品 | CSDN 云计算 2023 年的第二周,英特尔重磅发布其企业级芯片领域重要的产品——第四代英特尔 至强 可扩展处理器。作为数据中心处理器当之无愧的王牌产品,迄今为止,英特尔已经向全球客户交付了超8500万颗至强可扩展处理器…...
c++-运算符函数与运算符重载
目录概述例子注意问题概述 运算符重载是函数一个特殊情况,重载的运算符视为特殊的函数,称为运算符函数。 编译系统能依据使用运算符的不同环境,即参数(操作数)的数量或类型的差异,区分同一运算符的不同含义…...
【MySQL Shell】8.9.3 修复 InnoDB ClusterSet 中的成员服务器和集群
根据集群的问题或维护要求,可以使用以下操作来处理其成员服务器。除非另有说明,否则请使用使用 InnoDB Cluster 管理员帐户或服务器配置帐户获取的 Cluster 和 ClusterSet 对象,以便存储在 ClusterSet 对象中的默认用户帐户具有正确的权限。 …...
宝塔搭建实战php开源likeadmin通用管理pc端nuxt3源码(三)
大家好啊,我是测评君,欢迎来到web测评。 昨天给大家分享了admin前端的搭建部署方式,今天来给大家分享pc端在本地搭建,与打包发布到宝塔的方法,希望能够帮助到大家,感兴趣的朋友可以自行下载学习。 技术架构…...
【C++】---Stack和Queue的用法及其模拟实现
文章目录Stack最小栈栈的弹出压入序列逆波兰表达式求值用栈实现队列模拟实现queue用队列实现栈模拟实现Stack stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。它的使用和之前学习的ve…...
Python GUI编程
Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8…...
2023年浙江水利水电施工安全员精选真题题库及答案
百分百题库提供水利水电施工安全员考试试题、水利水电施工安全员考试预测题、水利水电施工安全员考试真题、水利水电施工安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 119.下列关于大模板按照的说法正确的是&#x…...
Solon2 开发之插件,三、插件体外扩展机制(E-Spi)
插件体外扩展机制,简称:E-Spi。用于解决 fatjar 模式部署时的扩展需求。比如: 把一些“业务模块”做成插件包放到体外把数据源配置文件放到体外,方便后续修改 其中, .properties 或 .yml 文件都会做为扩展配置加载&a…...
数据结构与算法(Java版) | 数据结构与算法的关系
从这一节起,咱们就要开始进入到「第二章——数据结构与算法的介绍」的学习中了,总的来说,第二章要讲解的内容其实也不是特别的多,内容也多偏理论,相信大家学起来是会比较轻松愉快的。 接下来,就请大家跟随…...
华科万维C++章节练习3_7
题目: 编程实现两种温度体系华氏温度和摄氏温度的相互转换; 以F作为华氏温度体系的单位,以C作为摄氏温度体系的单位。 要求当输入以F作为单位的温度值时(温度值范围[-500F~500F], 否则提示“数据输入有误!”)将其转换为对应的摄氏…...
CHAPTER 5 Jenkins SonarQube
Jenkins & SonarQube5.1 安装SonarQube1. 下载镜像2. 导出到其他服务器3. 准备工作4. docker-compose文件5. 启动容器5.2 登录SonarQube1.登录2. 安装中文语言插件3. 安装其他插件5.3 部署扫描器sonar-scanner1. 部署sonar-scanner2. 新建项目3. 扫描代码4. 查看报告5.4 Je…...
[AAAI 2023] Oral : Zero-shot 零样本/ Few-shot 少样本收录论文集合
零样本 (7篇): CALIP: Zero-Shot Enhancement of CLIP with Parameter-free AttentionGuo Ziyu; Zhang Renrui; Qiu Longtian; ma Xianzheng; Miao Xupeng; He Xuming; Cui BinMaximum Entropy Population-Based Training for Zero-Shot Human-AI CoordinationZhao …...
驱动开发 2.13
设备树 设备树就是一种描述硬件信息的树形结构,设备树上有很多设备节点,每一个设备节点都描述了一个硬件设备信息,设备节点中也可以再包含子设备节点和设备属性,同一个节点的不同属性是以链表结构存储,设备树有.dts设…...
【数据库】sql函数和多表关联查询
目录 一,SQL函数 1,聚合函数 1, count函数 2, AVG函数 3, SUM函数 4, MAX函数 5, MIN函数 6,数据分组——GROUP BY 7,限定组的结果,HAVING 8&#x…...
6-周赛332总结
6-周赛332总结 过了Q1和Q2,Q2知道用二分但是边界处理的不是很好,迷迷糊糊过的(手动再移动了下返回值…) Q3知道将子字符串的值取出来,将最短位置放在哈希表中,然后异或在哈希表中找值。但是我这个猪头脑袋…...
嵌入式Qt 开发一个音乐播放器
上篇文章:RK3568源码编译与交叉编译环境搭建,进行了OK3568开发板软件开发环境搭建,通过编译RK3568的源码,可以得到Qt开发的交叉编译相关工具。 本篇,就来在搭建好的软件开发中,进行Qt软件的开发测试。由于…...
2023秋招万得集团AI算法岗面经分享
本专栏分享 计算机小伙伴秋招春招找工作的面试经验和面试的详情知识点 专栏首页:秋招算法类面经分享 主要分享计算机算法类在面试互联网公司时候一些真实的经验 2022年 11.22下午AI算法岗面试 (1)一面35min 1、自我介绍 2、科研:长文本MRC...
RoI Transformer论文翻译详解
Learning RoI Transformer for Oriented Object Detection in Aerial Images 0.摘要 航空图像中的目标检测是计算机视觉中一个活跃而又具有挑战性的任务,因为它具有鸟瞰视角、高度复杂的背景和变化的物体外观。特别是在航空图像中检测密集的目标时,基于…...
Prometheus 自动发现监控AWS EC2实例
本文章简述对接自动发现AWS云EC2实例 前提环境: PromethuesGrafanaAWS IAM权限 涉及参考文档: AWS EC2Grafana 通用监控模板 一、IAM 用户创建 1、创建Prometheus 策略 策略规则: {"Version": "2012-10-17",&quo…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
大模型真的像人一样“思考”和“理解”吗?
Yann LeCun 新研究的核心探讨:大语言模型(LLM)的“理解”和“思考”方式与人类认知的根本差异。 核心问题:大模型真的像人一样“思考”和“理解”吗? 人类的思考方式: 你的大脑是个超级整理师。面对海量信…...
