第三篇 核心应用篇

在本章中,将通过案例示范学习SQL Server数据库的一些核心应用。

例如,SQL Server视图的使用、游标的应用、存储过程的应用、索引的应用、触发器的应用、SQL Server事务与锁的应用等。

学完本篇,读者将对SQL Server数据库的管理、操作以及使用SQL Server数据库进行综合性应用具有一定的能力。

第10章 视图的使用

🎉

学习指引

视图是一种常用的数据库对象,它将查询的结果以虚拟表的形式存储在数据库中,而并不在数据库中以存储数据集的形式存在。

本章就来介绍视图的使用,主要内容包括视图概述,视图分类与操作,通过视图操作数据等。

10.1 认识什么是视图

视图中的内容是由查询定义来的,并且视图和查询都是通过SQL语句来定义的,他的行为与表非常相似,但视图是一个虚拟表。

在视图中用户可以使用SELECT语句查询数据,以及使用INSERT、UPDATE和DELETE语句修改记录。对于视图的操作最终将转换为基本数据表的操作。视图不仅可以方便用户操作,而且可以保障数据库系统的安全。

在SQL Server中,视图可以分为三类,分别是:标准视图、索引视图和分区视图。

10.1.1标准视图

标准视图组合了一张或多张表中的数据,可以获得使用视图的大多数好处,包括将重点放在特定数据上及简化数据操作。

10.1.2 索引视图

索引视图时被具化了的视图,即它已经过计算并存储。可以为视图创建索引,即对视图创建一个唯一的聚集索引。索引视图可以显著提高某些类型查询的性能。索引视图尤其适于聚合许多行的查询,但它们不太适合与经常更新的基本数据集。

10.1.3 分区视图

分区视图在一台或多台服务器间水平连接一组成员表中的分区数据。这样,数据看上去如同来自于一张表。连接同一个SQL Server实例中的成员表的视图是一个本地分区视图。

10.2 使用SQL语句操作视图

视图的结构和内容是建立在对表的查询基础之上的,与表一样包括行与列,这些行列数据都来源于其所引用的表,并且是在引用视图过程中动态生成的。

本小节就来介绍使用SQL语句操作视图的步骤。

10.2.1 使用CREATE VIEW语句创建视图

语法如下:

CREATE VIEW [schema_name.] view_name [column_list]
AS select_statement
[WITH CHECK OPTION]
[ENCRYPTION]

主要参数说明:

  • schema_name:视图所属架构的名称
  • view_name:视图的名称。视图名称必须符合有关标识符的规则。可以选择是否指定视图所有者名称。
  • column_list:视图中各个列使用的名称
  • AS:指定视图要执行的操作
  • select_statement:定义视图的SELECT语句。该语句可以使用多张表和其他视图。
  • WITH CHECK OPTION:强制针对视图执行的所有数据修改语句,都必须符合在select_statement中设置的条件。通过视图修改行时,WITH CHECK OPTION可确保提交修改后,仍可通过视图看到数据。
  • ENCRYPTION:对创建视图的语句加密。该项可选。
📢注意:
视图定义中的SELECT子句不能包括下列内容:
(1)COMPUTE或COMPUTE BY子句。
(2)ORDER BY子句,除非在SELECT语句的选择列表中也有一个TOP子句。
(3)INTO关键字。
(4)OPTION子句。
(5)引用临时表或表变量。

💡提示:ORDER BY子句仅用于确定视图定义中的TOP子句返回的行,ORDER BY不保证在查询视图时得到有序结果,除非在查询本身中也指定了ORDER BY。

例:在数据库mydatabase中的employee数据表上创建一个名为view_emp的视图,用于查看员工的编号、姓名、当前职位,SQL语句如下:

CREATE VIEW view_emp AS
SELECT code 员工编号,name 员工姓名,job 职务
FROM employee

从结果看出,视图view_emp中查询的内容与基本表中是一样的,这里的view_emp中包含三列。

例:创建一个名为view_info的视图,用于查看员工的姓名、职务、部门名称及工资

CREATE VIEW view_info AS
SELECT a.name,a.job,b.deptname,a.salary
FROM employee a,dept b
WHERE a.deptcode=b.deptid

通过创建视图来查询数据,可以很好地保护基本表中的数据。

10.2.2 使用ALTER VIEW语句修改视图

当视图创建完成后,如果觉得有些地方不能满足需要,可以修改视图,而不必再重新创建。

修改视图的语法如下:

ALTER VIEW [schema_name] view_name [column_list] 
AS select_statement
[WITH CHECK OPTION]
[ENCRYPTION]
💡从语法中可以看出,修改视图就只是把创建视图的CREATE关键字替换为ALTER关键字,其他不变。

例:修改名为view_info的视图,用于查看员工编号、姓名、当前职位、所在部门以及基本工资。

ALTER VIEW view_info AS
SELECT a.code,a.name,a.job,b.deptname,a.salary
FROM employee a,dept b
WHERE a.deptcode=b.deptid

另外,使用系统存储过程sp_rename可以为视图进行重命名操作

例:重命名视图view_info为view_info_01

sp_rename 'view_info','view_info_01'

📢注意:

从结果中发现,在对视图进行重命名后,会给使用该视图的程序造成一定的影响。因此,在为视图重命名前,要先知道是否有一些其他数据库对象使用该视图名称,在确保不会对其他对象造成影响后,再对其进行重命名操作。

10.2.3 使用DROP VIEW语句删除视图

数据库中的任何对象都会占用数据库的存储空间,视图也不例外。当视图不再使用时,要及时删除。

使用DROP语句

DROP VIEW[schema_name] view_name1,view_name2,...

各参数说明:

  • schema_name:指该视图所属架构的名称;
  • view_name:指要删除的视图名称;

注意:schema_name可以省略。

例:删除系统中的view_emp视图

DROP VIEW view_emp

删除完毕后,再查询一下视图信息

10.3 以界面方式操作视图

视图为数据呈现提供了多样的表现形式,用户可以通过视图浏览表中感兴趣的数据,在SSMS中,可以以界面方式操作视图,包括创建、修改和删除。

10.3.1 在SSMS中创建视图

在SSMS中创建视图最大的好处就是无须记住SQL语句。

例:创建视图view_emp_01,查询员工信息表中员工的编号、姓名、职务:

步骤1:启动SSMS,打开数据库mydatabase,在展开该数据库的“视图”结点,然后右键选择快捷菜单“新建视图”命令。

步骤2:弹出“添加表”对话框。在“表”选项卡中列出了用来创建视图的基本表,选择表“employee”,单击【添加】按钮,然后单击【关闭】。

💡提示:
视图的创建也可以基于多张表,如果要选择多张表,可以按住CTRL键,然后分别选择列表中的数据表。

步骤3:此时,即可打开“视图编辑器”窗口,窗口中包含三块区域,一是“关系图”窗格,可以添加或删除表;一是“条件”窗格,可以对视图的显示格式进行修改;一是“SQL”窗格,可以输入SQL语句;

步骤4:在“关系图”窗格区中单击表中字段左边的复选框选择需要的字段。

💡提示:
在SQL窗格区域中,可以进行以下具体操作:
(1)通过输入SQL语句创建新查询;
(2)根据在“关系图”窗格和“条件”窗格中进行的设置,对查询和视图设计器创建的SQL语句进行修改。
(3)输入语句可以利用所使用数据库的特有功能。

步骤5:单击工具栏【保存】按钮,打开“选择名称”对话框,输入视图的名称后,单击【确定】保存即可完成视图的创建。

💡提示:
用户也可以单击工具栏上对应的按钮选择打开或者关闭这些窗格,鼠标悬停会自动出现该命令的提示。

10.3.2 在SSMS中修改视图

修改视图的界面与创建视图的界面非常类似。

例:修改视图view_emp_01,只查询员工信息表中姓名、职务与工资:

步骤1:启动SSMS,打开数据库mydatabase,再展开该数据库下的“视图”结点,在“视图”下找到需要修改的视图后,右键,在弹出的快捷菜单中选择“设计”命令;

步骤2:修改视图中的语句,在视图编辑器窗口中,从数据表中取消code的选重状态,同时选中salary全的复选框;

步骤3:单击【保存】按钮,即可完成对视图的修改。

10.3.3 在SSMS中删除视图

在SSMS中删除视图的操作非常简单:

步骤1:启动SSMS,打开数据库mydatabase结点,再展开该数据库下的“视图”结点,选择需要删除的视图,右键,在弹出的快捷菜单中选择“删除”命令;

步骤2:弹出“删除对象”窗口,单击【确定】按钮,即可完成视图的删除。

10.4 通过视图操作数据

通过视图操作数据库是指通过视图来插入、修改、删除表中的数据,因为视图是一个虚拟表,其中没有数据。通过视图操作的时候都是转到基本表进行更新的,如果对视图增加或者删除记录,实际上是对其基本表增加或者删除记录。

10.4.1 通过视图插入数据

使用INSERT语句可以向单个基本表组成的视图中添加数据,而不能向多张表组成的视图中添加数据。

例:通过视图向基本表employee中插入一条新纪录

首先我们创建一个视图

CREATE VIEW view_emp AS
SELECT * FROM employee

然后观察一下插入前表中数据,稍后好做对比

使用创建的视图向表中插入一行数据

INSERT INTO view_emp
VALUES(116,'雷鸣鸣','女',3,'销售员',2500)

如果视图并非基本表的全部字段,也可插入新行:

先创建一张非完整字段的视图

CREATE VIEW view_emp_02(编号,姓名,职务,工资,部门编码) AS
SELECT code,name,job,salary,deptcode
FROM employee

老规矩,先来看看插入前的表,也就是上面例子的结果,这里就不重复贴图了,接着插入新纪录

INSERT INTO view_emp_02
values(117,'万金油','技术员',3000,2)

💡注意:插入新数据时,切记不要忘记字段类型和字段顺序。
10.4.2 通过视图修改数据

除了可以插入一条完整的记录外,通过视图也可以更新基本表中的记录的某些列值。

例:通过视图view_emp将编号时101的员工姓名修改为“张大明”

UPDATE view_emp
SET name='张大明'
WHERE code=101

例:通过视图view_emp_02将部门编码为2的员工工资增加500元

UPDATE view_emp_02
SET 工资=工资+500
WHERE 部门编码=2

这是修改前

这是修改后

10.4.3 通过视图删除数据

当数据不再使用时,可以通过DELETE语句在视图中删除

例:通过视图view_emp_02删除基本表employee中的记录

DELETE FROM view_emp_02
WHERE 姓名='张大明'

看下基本表的数据

可以发现,操作视图,等于操作基本表。

📢注意:
建立在多张表之上的视图,无法使用DELETE语句进行删除操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/918467.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/918467.shtml
英文地址,请注明出处:http://en.pswp.cn/news/918467.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

功能测试中常见的面试题-一

一、基础概念与理论题什么是软件测试?它的目的是什么?回答: 软件测试是通过人工或自动化手段,运行或评估软件系统,以验证它是否满足规定的需求、识别实际结果与预期结果之间的差异,并评估软件产品质量的过程…

LINUX88 变量:命令定义;普通数组定义(复);declare -i /-x

问题 [codesamba ~]$ array3(ls axel-2.4) [codesamba ~]$ echo $array3 API [codesamba ~]$ ls axel-2.4 API CHANGES conn.o gui README tcp.o axel conf.c COPYING http.c ru.mo text.c axel.1 …

数字IC后端PPA优化| Timing一致性调整方法和Module Region规划方法

Q1:直播课经常讲到一致性,这个一致性的话一般是指place,CTS和PT的derating time,uncertainty和transition吗,我大概知道innovus的uncertainty设置要比PT里面高一点,但具体设计时这几部分的大小应该是一个什么样的关系或…

电子电气架构 --- 软件定义汽车的驱动和挑战

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

机器学习——10 支持向量机SVM

1 支持向量机 1.1 故事引入看下图左边,蓝色和红色的点混在一起,这就像一堆数据,没办法用一条简单的直线把它们分开。再看下图右边,有一条直线把蓝色和红色的点分开,这就是SVM在找的“决策边界”,它能把不同…

若以微服务部署踩坑点

windows docker desktop 部署nacos mysql1、docker部署nacosdocker pull nacos/nacos-server:v2.4.3docker启动命令 docker run --name nacos -d -p 8848:8848 -p 9848:9848 -p 9849:9849 --privilegedtrue --network bridge -e MODEstandalone -e SPRING_DATASOURCE_PLATFORMm…

Lua基础+Lua数据类型

Lua基础 Lua介绍 特点:轻量、小巧。C语言开发。开源。 设计的目的:嵌入到应用程序当中,提供灵活的扩展和定制化的功能。 luanginx,luaredis。 环境安装 windows上安装lua: 检查机器上是否有lua C:\Users\cpf>lua lu…

基于VuePress2开发文档自部署及嵌入VUE项目

最近在搞前端开发帮助文档,转了一圈发现Vue提供了一个高性能的、Vue驱动的静态网站生成框架-VuePress。VuePress 是一个以 Markdown 为中心的静态网站生成器。你可以使用 Markdown 来书写内容(如文档、博客等),然后 VuePress 会生…

Flask初步学习

文章目录一、初识Flask1.1 Pycharm修改环境配置1.2 运行第一个flask项目1.3 获取数据请求1.3.1 动态路由参数一、初识Flask 1.1 Pycharm修改环境配置 file——settings——project——python Interpreter——add interpreter——add local interpreter 1.2 运行第一个fla…

word的正则替换

word查看选中了几行 word替换掉空行 替换空行 按下 “Ctrl H” 组合键打开 “查找和替换” 对话框,在 “查找内容” 框中输入 “pp”,“^p” 代表段落标记,两个 “^p” 表示连续的两个段落标记,即空行。在 “替换为” 框中输入 “…

Spring Framework源码解析——DisposableBean

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl一、概述 DisposableBean 是 Spring 框架中用于定义 Bean 销毁时回调行为的核心接口之一。它提供了一个标准化的钩子方法 destroy(),允许 Bean 在容器关闭或作用域…

linux安装和使用git

Linux 上安装 Git 在 Linux 上安装 Git,你可以按照以下步骤进行: 打开终端:打开你的 Linux 终端应用程序。通常可以通过在应用程序菜单中搜索 "Terminal" 或 "终端" 来找到它。 更新软件包列表:运行以下命令…

数字图像处理4

预处理——ROI——形态学处理形态学处理形态学变化只能在二值图上处理1.腐蚀Erode对kernel映射的区域做与操作,包括自己在内如果有0则中间赋值成02.膨胀Dilate对kernel映射的区域做或操作,包括自己在内如果有1则中间赋值成13.其他操作开操作:…

Solon v3.4.3 发布(国产 Java 应用开发生态基座)

Solon 框架! Solon 是新一代,Java 企业级应用开发框架。从零开始构建(No Java-EE),有灵活的接口规范与开放生态。采用商用友好的 Apache 2.0 开源协议,是“杭州无耳科技有限公司”开源的根级项目&#xff…

Spring-Security-5.7.11升级6.5.2

1.Session Management 1.1.必须明确调用SecurityContextRepository保存SecurityContext 在Spring Security 5中,默认行为是SecurityContext使用SecurityContextPersistenceFilter自动保存到SecurityContextRepository。 //版本5.7.11 //SecurityContextPersisten…

docker下载安装和使用(Hyper-V方式)

1.环境准备 左键单击电脑左下角开始按钮—>点击“设置”—>搜索“Windows功能”—>启用或关闭Windows功能—>勾选Hyper-v,启用后电脑会重启,安装环境配置成功。 选择 Hyper-v2.下载docker docker官网下载地址:https://www.docker…

【消息队列】RabbitMQ “消息队列模式” 以及NET8集成

在 .NET 8 中集成 RabbitMQ 消息队列,可以使用官方推荐的 RabbitMQ.Client 库或封装好的 MassTransit/EasyNetQ 等高级库。以下是 RabbitMQ 的基本集成代码 和 常见消息模式 的实现。 RabbitMQ 本身并没有直接支持延时消息的功能,但是可以通过一些机制来…

Docker 镜像常见标签(如 `标准`、`slim`、`alpine` 和 `noble`)详细对比

以下是 Docker 镜像常见标签(如 标准、slim、alpine 和 noble)的详细对比,涵盖基础系统、体积、适用场景及注意事项:1. 标准镜像(无后缀) 基础系统:完整 Linux 发行版(如 Debian、Ub…

(1-9-2)Java 工厂模式

目录 1.设计模式与分类 2. 工厂模式 2.1 工厂模式概述 2.2 简单工厂 2.3 学生推荐就业Demo 00.项目目录 01. 创建抽象接口Job 02. 创建实体类 03. 创建推荐工作工厂类 04. 创建学生推荐就业客户类 3. i18n国际化语言标题自适应 00. 实现效果 01. 创建抽象接口 02…

QT远程开发技巧

交叉编译时野火提供的文件 交叉编译器 GNU官网可以下载, QT库文件这里给的QT-everyWhere版本,是开源版本需要自行编译。(远程服务器通常是PC架构【AMD64】,直接apt-get install下载的qt也是Pc架构的,不能直接在板卡【ARM64】上运行,必须对源码交叉编译) 注意QT遵从GPL开源…