视图-什么是(VIEW)?怎么创建(CREATE VIEW)?怎么删除(DROP)?怎么用(SELECT/INSERT/UPDATE/DELETE)?

一、引言

之前对数据库的操作都是针对基本关系表,操作都是在数据库的全局逻辑模式上进行的,而在实际的数据库系统中,可能用户只关心或只被允许使用数据库中的某些基本关系表或基本关系表中的某些属性列,这些数据构成了数据库的外模式,外模式的定义可通过定义视图来实现

二、视图的定义-什么是视图?

1、视图是一个命名了的代数表达式,是从一个或几个基本表(或视图)导出来的关系变量视图的值是代数表达式计算后所得到的结果

2、在SQL语言中,视图是一个虚表,在数据库中只存放视图的定义,不存放视图对应的数据,视图的创建为用户提供了一个观察底层数据的窗口,基本表发生变化后,对应视图也会随之改变

三、视图的创建-怎么创建视图?(CREAT VIEW

1、语法格式:

CREATE VIEW 视图名

【(<属性列名1>【,<属性列名2>,...】)】

AS 子查询

【WITH CHECK OPTION】

2、注意:

(1)以在视图名后面对子查询结果中各个属性列进行重命名也可以省略重命名,直接使用子查询结果中的属性列名

(2)通常在以下三种情况下要对子查询中的目标列一一对应地进行重命名操作

子查询目标列中含有聚集函数或列表达式时

子查询目标列中含有对多表查询产生的同名属性列时

需要在视图中为某些列使用更合适的列名时

(3)子查询可以是任意复杂的SELECT语句,实现对基本表或其它视图的查询,但有些DBMS不支持子查询中包含与查询结果的显示有关的ORDER BY语句和DISTINCT选项

(4)若CREATE VIEW语句后面加上WITH CHECK OPTION,则要求在对视图进行更新操作时检查待更新的元组是否满足子查询中的元组选择条件

(5)DBMS执行创建视图语句的结果只是把视图的定义存入数据字典中,并不执行其中的子查询

3、举例1:创建数计学院的学生视图

create view sJ_s (sJ_sNo,sJ_sN,sJ_sB)
  as select sNo,sN,sB
     from s
	 where sD='数计学院';

此视图是行列子集视图,即从单个表导出的,只去掉了基本表的某些行或列,但保留基本表的主键的视图

4、举例2:创建学生成绩视图

create view s_grade(sNo,sN,cNo,grade)
  as select s.sNo,s.sN,sC.cNo,sC.grade
     from s,sC
	 where s.sNo=sC.sNo;

5、举例3:定义由学号及该学生的平均成绩构成的视图(视图的基础上创建视图)

create view s_ave(sNo,grade)
  as select sNo,avg(grade)
     from s_grade
	 group by sNo;

四、视图的删除-怎么删除视图?

1、语句格式:

DROP VIEW 视图名【CASCADE】

1、当基本表被删除,或基本表的结构发生了变化,则从基本表中导出的视图也无法使用,需要使用DROP VIEW语句来删除视图

2、如果在待删除视图上还导出了其它视图,可使用CASCADE选项,把该视图由它导出的所有视图一起删除

3、举例1:将前面创建的视图sJ-s删除

drop view sJ_s;

4、举例2:将前面创建的视图s_grade及在其基础上创建的视图s_gve删除

drop view s_grade cascade;

注意:不同DBMS对CASCADE选项的支持程度不同对视图上还创建有视图的删除操作限制也不同,比如SQL Server就不直接支持这种关联式删除

五、视图的查询-怎么查询视图?

视图定义之后,就可以像查询基本表一样查询视图

1、例1:查询学生的学号和平均成绩

方式一:查询学生成绩视图

select sNo,avg(grade)
from s_grade
group by(sNo);

方式二:查询学生平均成绩视图

select sNo,grade
from s_ave;

注:DBMS执行对视图的查询时,首先要进行有效性检查,检查查询中涉及的基本表、视图是否存在,如果存在,则从数据字典中取出视图的定义,把定义的子查询与用户对视图的查询结合起来,转化为对等价基本表的查询

比如方式一所执行的对视图的查询语句本质上执行的是如下的对等价表的查询:

select s.sNo,avg(grade)
     from s,sC
	 where s.sNo=sC.sNo
	 group by(s.sNo);

六、视图的更新-怎么更新视图?

1、和对基本表的更新一样,包括插入元组、修改属性值和删除元组操作

2、对视图的更新本质上还是对表的更新,不会作用到视图上

3、插入元组-在sJ_s中插入元组

(1)

insert into sJ_s
       values('202218014038','张飞','2000-06-01') 

(2)如果想要在视图中插入元组时只插入满足定义视图时的子查询的元组选择条件表达式的元组,只需要再定义视图时设置WITH CHECK OPTION

create view sJ_s (sJ_sNo,sJ_sN,sJ_sB)
  as select sNo,sN,sB
     from s
	 where sD='数计学院'
with check option

2、修改属性值-将学号为202218014030的学生的名字改为西施

update sJ_s
set sJ_sN='西施'
where sJ_sNo='202218014030'

3、删除元组-删除学号为202218014037的学生

delete
from sJ_s
where sJ_sNo='202218014037'

4、不是所有对视图的更新操作都是可行的,有些对视图的更新操作不能唯一的有意义地转换成对相应基本表的更新,就不执行成功,比如想要将学号为202218014030的学生的成绩改为90

update s_ave
set grade=90
where sNo='202218014030'

原因:grade是派生属性,实质上是对sC表进行分组聚集查询所得到的属性,无法将学生的平均成绩作用到各科的成绩上

5、DBMS系统对视图的更新通常有如下限制:

(1)由多表导出的视图不允许更新

(2)如果视图的属性列来自表达式或常数,则不允许执行INSERT和UPDATE操作,但允许执行DELETE操作

(3)如果在定义视图用到GROUP BY子句或聚集函数则不允许更新该视图

(4)建立在一个不允许更新的视图上的视图不允许更新

(5)一般都允许对行列子集视图进行更新

(6)基本表中没在视图中出现的属性无NOT NULL约束时,才允许进行插入操作

七、视图的作用-为什么要有视图?

1、视图提供了一个简化用户操作的快捷方式

举例:查询“西施”同学课程成绩高于其平均成绩的课程编号及成绩

(1)创建两个视图:

创建学生成绩视图

create view s_grade(sNo,sN,cNo,grade)
  as select s.sNo,sN,cNo,grade
     from s,sC
     where s.sNo=sC.sNo;

创建学生平均成绩视图

create view s_ave(sNo,gave)
  as select sNo,avg(grade)
     from s_grade
	 group by(sNo)

(2)在两个创建好的视图上通过连接查询再创建一个视图

create view s_g(sNo,sN,cNo,grade,gave)
  as select s_grade.sNo,sN,cNo,grade,gave
     from s_grade,s_ave
	 where s_grade.sNo=s_ave.sNo;

(3)直接在创建好的视图进行查询需要的数据即可

select cNo,grade
from s_g
where sN='西施' and grade>gave

2、支持多用户同时以不同的方式对相同的数据进行查询

3、可提供对数据的安全保护

4、可以实现数据的逻辑独立性

(1)比如数据库中有一个学生表s(sNo,sN,sex,sB,sD),里面已经有了数据

(2)因为某些原因,要对学生表s进行重构为两个表sX(sNo,sN,sex,sB)和sY(sNo,sD)

(3)通过在表sX和sY的基础上创建视图可以去避免因为对表的重构而带来的对原表中的数据进行访问所带来的问题

create view s(sNo,sN,sex,sB,sD)
  as select sX.sNo,sN,sex,sB,sD
     from sX,sY
	 where sX.sNo,sY.sNo

八、总结

1、视图是DBMS所管理的一个数据库对象,是数据库的外模式

2、视图是创建在基本表之上的,是通过基本表来进行创建的,对视图的操作类似于对基本表的操作

3、视图在数据库的应用中发挥着重要作用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/711890.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

短视频文案素材哪里找?推荐几个既好看又好用的素材网站

我们在做短视频的同时&#xff0c;一般需要一些视频&#xff0c;文案&#xff0c;图片&#xff0c;音频&#xff0c;来添加短视频的突出点&#xff0c;那么这些短视频文案去哪里找呢? 蛙学网 想要做出容易上热门的短视频文案&#xff0c;你一定要找到合适的短视频素材&#…

鸿蒙轻内核M核源码分析系列二一 02 文件系统LittleFS

1、LFS文件系统结构体介绍 会分2部分来介绍结构体部分&#xff0c;先介绍LittleFS文件系统的结构体&#xff0c;然后介绍LiteOS-M内核中提供的和LittleFS相关的一些结构体。 1.1 LittleFS的枚举结构体 在openharmony/third_party/littlefs/lfs.h头文件中定义LittleFS的枚举、…

【人工智能】开发AI可能获刑?加州1047草案详解

引言 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;其应用领域不断扩展&#xff0c;但同时也引发了诸多争议和监管问题。近期&#xff0c;加州参议院以32比1的压倒性投票通过了1047号草案&#xff0c;又称《前沿人工智能模型安全可靠创新法案》。这一草案…

贪心算法学习四

例题一 解法&#xff08;暴⼒解法 -> 贪⼼&#xff09;&#xff1a; 暴⼒解法&#xff1a; a. 依次枚举所有的起点&#xff1b; b. 从起点开始&#xff0c;模拟⼀遍加油的流程 贪⼼优化&#xff1a; 我们发现&#xff0c;当从 i 位置出发&#xff0c;⾛了 step 步…

【七合一】字典词典成语古诗词造句英语单词文库

帝国CMS7.5 UTF-8 系统开源&#xff0c;不限域名 采用静态伪静态&#xff08;会缓存静态文件&#xff09; 一款7合一的字词句诗典籍模板&#xff0c;包含字典、词典、成语、名句、诗词、古籍、英语、作文、等等。是一款养站神器。 作文范文,作文范文可生成word文档下载能自由…

Ubuntu server 24 (Linux) 安装部署samba服务器 共享文件目录 windows访问

1 安装 sudo apt update sudo apt-get install samba #启动服务 sudo systemctl restart smbd.service sudo systemctl enable smbd.service #查看服务 2 创建用户 #创建系统用户 sudo useradd test2 #配置用户密码 sudo smbpasswd -a test2 # smbpasswd: -a添加用户 …

408数据结构-图的遍历 自学知识点整理

前置知识&#xff1a;图的存储与基本操作 图的遍历是指从图的某一顶点出发&#xff0c;按照某种搜索方法沿着图中的边对图中的所有顶点访问一次&#xff0c;且仅访问一次。因为树是一种特殊的图&#xff0c;所以树的遍历实际上也可以视为一种特殊的图的遍历。图的遍历算法是求解…

【Apache Doris】Compaction 原理 | 实践全析

【Apache Doris】Compaction 原理 | 实践全析 一、Compaction 前文概要二、Compaction 版本策略三、Compaction 类型说明四、Compaction 工程实现五、Compaction 生产实践 作者 &#xff5c; 俞剑波 一、Compaction 前文概要 LSM-Tree 简介 LSM-Tree&#xff08; Log Structu…

为什么笔记本电脑触控板不工作?这里有你想要的答案和解决办法

序言 你的笔记本电脑触控板停止工作了吗?值得庆幸的是,这个令人沮丧的问题通常很容易解决。以下是笔记本电脑触控板问题的最常见原因和修复方法。 触控板被功能键禁用 大多数(如果不是全部的话)Windows笔记本电脑都将其中一个功能键用于禁用和启用笔记本电脑触控板。按键…

Type-C接口显示器:C口高效连接与无限可能 LDR

Type-C显示器C接口的未来&#xff1a;高效连接与无限可能 随着科技的飞速发展&#xff0c;我们的日常生活和工作中对于高效、便捷的连接方式的需求日益增加。在这样的背景下&#xff0c;Type-C接口显示器凭借其卓越的性能和广泛的兼容性&#xff0c;正逐渐崭露头角&#xff0c…

永磁同步直线电机(PMLSM)控制与仿真1-永磁同步直线电机数学模型

文章目录 1、引言2、永磁同步直线电机数学模型2.1 直线电机的结构和工作原理2.2 永磁同步直线电机系统干扰分析2.2.1 齿槽效应2.2.2 端部效应 2.3 永磁同步直线电机的结构2.4 永磁同步直线电机的数学模型2.4.1 ABC坐标系下 PMLSM 的数学模型2.4.2 dq坐标系下 PMLSM 的数学模型2…

推荐这两款非常良心的录屏和文字转语音工具,很是让人心动,不要错过

VPot FREE 吾爱大神制作的文字转音频工具&#xff0c;免费使用。 支持英语、韩语、法语、日语等语言&#xff0c;还是支持男声、女声和儿童声音。 支持将以导入文本的格式转换成音频&#xff0c;并保存为MP3、WAV等常见的音频格式。 VPot FREE提供智能断句的功能&#xff0…

孝子黄香与颍川□董超

“香九龄&#xff0c;能温席&#xff0c;孝于亲&#xff0c;所当执。”家喻户晓、妇孺皆知的《三字经》让孝子黄香名扬千秋&#xff0c;成为“二十四孝”中闻名于世的“扇枕温衾”故事的主角。 黄香&#xff08;公元68—122年&#xff09;&#xff0c;字文强&#xff0c;东汉江…

谷歌上架,APP被移除了,没封号,换个包名还能重新提审上架?

对于在Google Play上架应用的开发者来说&#xff0c;尤其是那些矩阵式上架马甲包的开发者&#xff0c;可能已经遭遇过无数次应用被暂停或移除的情况了。通常这种情况下&#xff0c;账号也随之会被封&#xff0c;且大多数开发者认为&#xff0c;没有立马收到封号邮件的话&#x…

什么是深拷贝;深拷贝和浅拷贝有什么区别;深拷贝和浅拷贝有哪些方法(详解)

目录 一、为什么要区别深拷贝和浅拷贝 二、浅拷贝 2.1、什么是浅拷贝 2.2、浅拷贝的方法 使用Object.assign() 使用展开运算符(...) 使用数组的slice()方法&#xff08;仅适用于数组&#xff09; 2.3、关于赋值运算符&#xff08;&#xff09; 三、深拷贝 3.1、什么是…

CMU最新论文:机器人智慧流畅的躲避障碍物论文详细讲解

CMU华人博士生Tairan He最新论文&#xff1a;Agile But Safe: Learning Collision-Free High-Speed Legged Locomotion 代码开源&#xff1a;Code: https://github.com/LeCAR-Lab/ABS B站实际效果展示视频地址&#xff1a;bilibili效果地址 我会详细解读论文的内容,让我们开始吧…

大模型应用:LangChain-Golang核心模块使用

1.简介 LangChain是一个开源的框架&#xff0c;它提供了构建基于大模型的AI应用所需的模块和工具。它可以帮助开发者轻松地与大型语言模型(LLM)集成&#xff0c;实现文本生成、问答、翻译、对话等任务。LangChain的出现大大降低了AI应用开发的门槛&#xff0c;使得任何人都可以…

C++ UML建模

starUML UML图转C代码 数据流图 E-R图 流程图 整体架构图 ORM关系图 参考 app.asar附件资源可免激活 JHBlog/设计模式/设计模式/1、StarUML使用简明教程.md at master SunshineBrother/JHBlog GitHub C程序员UML实务手册代码 - 开发实例、源码下载 - 好例子网 GitHub -…

RK3568平台(触摸篇)触摸屏基本原理

一.触摸屏概述 触摸屏作为一种新的输入设备&#xff0c;它是目前最简单、方便、自然的一种人机交互方式。 触摸屏又称为“触控屏”、“触控面板”&#xff0c;是一种可接收触头等输入讯号的感应式液晶显示装置&#xff1b;当接触了屏幕上的图形按钮时&#xff0c;屏幕上的触觉…

python保存文件后打不开的原因是什么

引入数据集&#xff0c;奇怪的是怎么也打不开&#xff0c;显示不存在这个文件&#xff1a; 但是&#xff0c;我将文件改个名字&#xff0c;就打开了&#xff0c;难道csv的文件命名必须有一定合法性&#xff1f; import pandas users pandas.read_csv("H:\python\data an…