SQL Server(五)-视图

2023-10-31

  与表一样,视图也是由字段和记录组成的,只是这些字段和记录来源于其他被引用的表或视图,所以视图并不是真实存在的,而是一张虚拟的表,视图中的数据并不是存在于视图中的,而是存在于被引用的数据表当中的。当被引用的数据表中的记录内容改变时,视图中的记录内容也会随之改变。
● 创建与使用视图
● 查看、修改与删除视图
● 通过视图操作数据表


1、 视图基础
  视图由一个预定义的查询(SELECT语句)组成,可以像基本表一样用于SELECT语句中。如果视图满足一定条件,还可以用在INSERT、UPDATE和DELETE语句中。
【例1】查询“邓小平理论”考试成绩大于等于90的学生的学号、姓名、所属院系和考试成绩。
分析:“邓小平理论”是course表中“课程名称”(cname)字段的值,考试成绩是score表中“考试成绩”(exam)字段的值,而学号、姓名和院系是stu_info表中存放的数据。因此要想得到本例要求的结果,则必须对course、score和stu_info三个表进行连接查询。

SELECT st.sno, st.sname , st.depart,s.exam
FROM  stu_info st,course c,score s
WHERE  c.cname ='邓小平理论'
AND s.exam >=90
AND st.sno =s.sno
AND c.cno = s.cno

视图里存放了SELECT语句而并非是查询结果。每次在SQL语句中使用视图,其实就是在执行视图内存放的SELECT语句,因此通过视图总能够得到最新的数据。
【例2】定义一个视图vwA,将上例的SELECT语句存放到该视图内。

CREATE VIEW  vwA
AS
SELECT st.sno,st.sname ,st.depart,s.exam
FROM  stu_info st,course c,score s
WHERE  c.cname = '邓小平理论'
AND s.exam >= 90
AND st.sno = s.sno
AND c.cno = s.cno

运行上面的语句,并在左侧【对象资源管理器】的目录树中展开【test】|【视图】,就会看到dbo.vwA视图已经被成功创建
【例3】在视图vwA上运行一个简单查询。

SELECT  *
FROM  vwA

注意:调用视图要考虑效率的损耗。例如,执行SELECT * FROM vw1时,实际上执行了两个SELECT语句。一个是该语句本身,另外一个是视图中存放的复杂连接的SELECT语句。
2、 视图的创建
(1) 在SSMS中创建视图(略)
(2) 使用CREATE VIEW语句创建视图

 

CREATE VIEW  视图名称 [(字段1,字段2…)]
AS
SELECT查询语句
[WITH CHECK OPTION]


其中,必须提供视图名称,视图名称后的[(字段1,字段2…)]为可选项,如果不提供字段名,则隐含视图由SELECT子句中列出的各字段组成。但在下列三种情况下必须明确指定组成视图的所有字段名。
SELECT子句中的某个列不是单纯的字段,而是集合函数或表达式。
● 多表连接时选出了几个同名字段,作为视图的字段。
● 需要在视图中为某个字段设置更合适的新名字。

注意:如果提供视图的字段名,则必须全部提供,不能只提供一部分。

【例5】创建视图vw_ boy,它用于将表stu_info中全部男生的信息显示出来。并使用视图vw_boy查询国际交流学院的男生。

CREATE VIEW  vw_boy
AS
SELECT  *
FROM  stu_info
WHERE  sex = '男'

下面的语句用来显示国际交流学院的男生。

SELECT  *
FROM  vw_boy
WHERE  depart='国际交流学院'

(3) 用别名命名视图字段
【例6】创建视图vw_ boy1,用于将表stu_info中全部男生的信息显示出来,并给相应字段设置中文别名。
 

CREATE VIEW  vw_boy1(学号,姓名,性别,出生日期,电子信箱,手机号码,所属院系)
AS
SELECT  *
FROM  stu_info
WHERE  sex='男'

(4) 创建视图时的注意事项
在用CREATE VIEW创建视图时,SELECT子句里不能包括以下内容:
COMPUTE、COMPUTE BY子句
● ORDER BY子句,除非在SELECT子句里有TOP关键字
● OPTION子句
● INTO关键字
● 临时表或表变量

【例7】创建视图vw_ boy2,用于将表stu_info中全部男生的信息显示出来,并根据出生日期升序排序。
 

CREATE VIEW  vw_boy2
AS
SELECT  *
FROM  stu_info
WHERE  sex='男'
ORDER BY birth


消息 1033,级别 15,状态 1,过程vw_boy2,第 6 行
除非另外还指定了TOP或FOR XML,否则,ORDER BY子句在视图、内联函数、派生表、子查询和公用表表达式中无效。
所以上述代码出现了错误。要想完成本例要求,应该使用下面的代码。

CREATE VIEW  vw_boy2
AS
SELECT  *
FROM  stu_info
WHERE  sex='男'
GO
SELECT *
FROM vw_boy2
ORDER BY birth
GO

(5) 创建加密视图
在SQL Server 2008中每个数据库的系统视图里都有一个名为“INFORMATION_SCHEMA.VIEWS”的视图,该视图里记录了该数据库中所有视图的信息,使用如下查询语句可以查看该视图内容。

SELECT *
FROM INFORMATION_SCHEMA.VIEWS

从查询结果中可以轻松地看到每个视图的定义语句,有时这会给用户带来不安全因素。如果不想让别人看到视图里的内容,可以使用with encryption参数为视图加密。
【例8】创建加密视图vw_girl,用于显示表stu_info中全部女生的信息,之后查看INFORMATION_SCHEMA.VIEWS的内容。
 

CREATE VIEW  vw_girl
WITH ENCRYPTION
AS
SELECT  *
FROM  stu_info
WHERE  sex='女'
GO
SELECT *
FROM INFORMATION_SCHEMA.VIEWS
GO

结果为vw_girl视图的定义为“NULL”,这样就可避免vw_girl视图的定义语句被其他人看到。

3 、操作视图
(1) 用ALTER VIEW修改视图
使用SQL语句的ALTER VIEW可以修改视图,其语法格式如下所示。

ALTER VIEW  视图名称 [(字段1,字段2…)]
AS
SELECT查询语句
[WITH CHECK OPTION]

【例11】修改视图vwA,使其能够查询“邓小平理论”考试成绩大于等于95的学生的学号、姓名、所属院系和考试成绩。
 

ALTER VIEW  vwA
AS
SELECT st.sno, st.sname , st.depart,s.exam
FROM  stu_info st,course c,score s
WHERE  c.cname = '邓小平理论'
AND s.exam >= 95
AND st.sno = s.sno
AND c.cno = s.cno
GO
SELECT *
FROM vwA
GO

所谓操作视图数据,其实是通过视图在操作其基表的数据而已

(2) 使用INSERT语句插入数据
【例12】通过vw_boy视图向stu_info表插入学生信息。


INSERT INTO vw_boy
VALUES ('0018','蒋十九','男','1988-05-29',NULL,NULL,'计算机系')
GO
SELECT *
FROM vw_boy
GO

(3 )使用UPDATE语句更新数据
在视图上使用UPDATE语句也可以更新基表的数据。并不是所有视图都能够更新数据,以下几种视图不能用于更新。
表值函数返回的结果只有在某些情况下才能更新。
● 如果查询或视图所包括的列来自多个表或视图,则不能更新这些查询或视图。
● 不能更新使用GROUP BY或DISTINCT子句的查询或视图。
● 不能更新存储过程返回的结果。

【例13】通过视图vw_boy将学生“周伦杰”的院系更新为“外语系”。
 

UPDATE  vw_boy
SET     depart='外语系'
WHERE  sname='周伦杰'
GO
SELECT  *
FROM   vw_boy
GO

(4) 使用DELETE语句删除数据

DELETE FROM  vw_boy
WHERE      sname = '张三'

(5)使用DROP VIEW语句删除视图

DROP VIEW  视图名称

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server(五)-视图 的相关文章

  • 逆向图片搜索 搜索自己想搜索的

    Tineye 是一个用图片搜索图片的技术 http www tineye com 开始时Tineye是邀请注册 后来是开放注册 不过都需要注册才能使用 现在终于完全放开 无需再注册或登录即可使用该搜索引擎 此外 Tineye最近还增添了一下

随机推荐

  • Vue+ElementUI el-radio列表单选

    实现效果 对某条数据进行数据修改 步骤 1 添加单选按钮 点击获取该条信息的id 并将id传给修改按钮 div 1 修改按钮 span size mini 修改信息 span 2 列表单选按钮
  • OptiSystem应用:光放大器EDFA的仿真

    Optisystem可以设计和模拟光纤放大器和光纤激光器 此处展示的案例可在Optisystem安装文件夹samplesOptical amplifiers中找到 该教程将会介绍光放大器库这一部分 光放大器 全局参数 使用Optisyste
  • Linux系统下Java 转换Word到PDF时,结果文档内容乱码的解决方法

    本文分享在Linux系统下 通过Java 程序代码将Word转为PDF文档时 结果文档内容出现乱码该如何解决 具体可参考如下内容 1 问题出现的背景 在Windows系统中 使用Spire Doc for Java将Word文档转换为PDF
  • [深度学习入门]Python基础语法(上)

    目录 一 程序设计基本方法 1 计算机是根据指令操作数据的设备 2 编程设计语言概述 3 计算机编程 4 IPO程序编写方法 5 使用计算机解决问题 二 基础知识 1 pyCharm 为人工智能领域常用的IDE 2 Python的简单使用
  • NVIDIA Shield 消失的解决办法和Moonlight串流

    Foreword 之前有用Moonlight串口pc的游戏到公司电脑 然后突然有一天串流就不可用了 NVIDIA Shield 就消失了 怎么都开不起来 串流就失败了 然后也记录一下Moonlight串流的操作 由于NVIDIA单方面宣布停
  • vue+element 根据状态,显示不同的操作按钮

    效果截图 VUE 核心功能代码片段
  • 【yolov5】yolov5训练自己的数据集全流程----包含本人设计的快速数据处理脚本

    关于yolo应用时能用到的脚本集合 推荐收藏 https chenlinwei blog csdn net article details 127299428 文章目录 1 工程化快速yolo训练流程指定版 无讲解 1 1 抽样数据集 xm
  • Spring MVC中如何进行转发和重定向呢?

    转自 Spring MVC中如何进行转发和重定向呢 重定向 我们将用户的定向到另一个视图 jsp 中处理 此操作是一个客户端行为 类似与url的链接操作 转发 将用户的请求转发到另一个视图或controller处理 此操作是一个服务器端行为
  • 【日常遇坑总结】类成员变量的空间分配和初始化顺序

    遇坑 今天在用QT的时候 传从主ui页面创建的一个指针到建模ui页面 在运行时程序发生奔溃 经过测试发现问题 主页面的指针和传进建模页面的指针不是同一个 导致在调用类指针方法时发生错误 测试 以下代码仅展示测试代码的部分 不可运行 但能从下
  • spring+ jcaptcha(spring框架下的彩色验证码)

    从jcaptcha官方网站下载jcaptcha的发行包 并将其发行包中的jar文件考贝到本地项目WEB INF目录下的lib目录中 官方网址http jcaptcha sourceforge net 在web xml文件中配置 Java代码
  • 嵌入式知识图谱WiKi(嵌入式开发/研发入门教程和路线图)

    嵌入式知识图谱WiKi 作者 将狼才鲸 创建时间 2022 02 18 因图床更新不方便 最新版请跳转到Gitee文档源文件仓库网址 才鲸 嵌入式知识图谱WiKi CSDN有图的文档阅读网址 嵌入式知识图谱WiKi Bilibili视频讲解
  • 数据结构--二叉树

    前言 关于二叉树知识的考察主要分两部分 第一部分在初赛中体现 一般考察二叉树的节点个数 树高和遍历问题 1 二叉树定义 在计算机科学中 二叉树是每个结点最多有两个子树的树结构 通常子树被称作 左子树 left subtree 和 右子树 r
  • Log4j2日志框架

    Log4j2日志框架 1 简介及入门示例 1 背景介绍 官网地址 https logging apache org log4j 2 x Maven 仓库地址 https search maven org artifact org apach
  • 机器学习心得体会总结

    第一 线性代数是把复杂问题简单化解决 但是简单问题已经很复杂了 第二 国内还没有一本关于机器学习讲得连老百姓都能看得明白的书籍 第三 克拉默法则 逆矩阵 初等变换都可以求解方程Ax b 后者方法更简单
  • C语言

    目录 一 实验环境 二 黑白圣诞树 三 windows h简介 四 windows h实现彩色圣诞树 1 设置用户窗口 2 移动光标 3 修改字体颜色 4 绘制圣诞树 5 绘制雪景 6 完整代码 7 运行 一 实验环境 编译环境 vc 6
  • 【因果推断与机器学习】带入坑——之辛普森悖论

    因果推断与机器学习 Why you might Care Simpson s Paradox 考虑一个纯粹假设的未来 那里有一种被称为COVID 27的新疾病在人类中普遍存在 在这个纯粹假设的未来中 已经开发了两种治疗方法 治疗A和治疗B
  • 西门子dcs系统组态手册下载_PLC/DCS/HMI 知识普及

    什么是PLC 可编程控制器 简称PLC Programmable logic Controller 是指以计算机技术为基础的新型工业控制装置 在1987年国际电工委员会颁布的PLC标准草案中对PLC做了如下定义 PLC是一种专门为在工业环境
  • 原版安装Win10 1909专业版 64位MSDN镜像2020 05

    原版安装Win10 1909专业版 64位MSDN镜像2020 05 一 更新内容 1 去除预装kms激活 未激活的可以通过桌面自行激活 2 提升商店购买应用的速度性能 3 解决在IE浏览器中阻碍下载和安装 NET组件的问题 4 更新修复补
  • Qt5.14.2 MInGW静态编译配置教程

    Qt5 14 2 MinGW静态编译教程 1 安装Qt 1 1 下载安装包 1 2 安装 2 工具的下载安装 3 检查上述配置是否成功 4 静态编译qmake 4 1 静态编译配置 4 2 编译 4 3 安装静态库 4 4新增静态编译 1
  • SQL Server(五)-视图

    与表一样 视图也是由字段和记录组成的 只是这些字段和记录来源于其他被引用的表或视图 所以视图并不是真实存在的 而是一张虚拟的表 视图中的数据并不是存在于视图中的 而是存在于被引用的数据表当中的 当被引用的数据表中的记录内容改变时 视图中的记