【数据库原理】(13)视图的使用

这篇具有很好参考价值的文章主要介绍了【数据库原理】(13)视图的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

视图(View) 是一种虚拟的表,它的内容由查询定义,但不存储实际的数据。视图是从一个或多个基本表(或其他视图)生成的。

特点:

  1. 虚拟性:视图不包含数据本身,仅保存了一个查询,这个查询在每次访问视图时动态地执行。

  2. 动态性:视图显示的数据是从基本表中实时检索出来的。因此,当基本表的数据发生变化时,视图显示的数据也会随之改变。

  3. 安全性:通过视图,可以限制用户访问基本表的特定数据,从而增强了数据库的安全性。

  4. 简便性:视图可以简化复杂的SQL操作。用户可以通过查询视图,而不必直接查询复杂的基本表。

  5. 逻辑独立性:用户可以使用视图而不必关心数据在基本表中是如何存储的。

一.定义和删除视图

1.建立视图

创建视图的目的是从一个或多个基本表(或其他视图)中提取数据,形成一个虚拟表。视图不存储实际的数据,而是保存了一个SQL查询作为其定义。这样,每次查询视图时,都会运行该查询以生成数据。

创建视图的基本语法如下:

CREATE VIEW<视图名> [(<列名>[,列名>]... )]
AS<SELECT语句>
[WITH CHECK OPTION];
  • <视图名>:要创建的视图的名称。
  • <列名1>, <列名2>, …:视图中的列名称,这是可选的。如果省略,则视图的列名称将是SELECT语句中指定的列名称。
  • <SELECT语句>:定义视图的查询。
  • WITH CHECK OPTION:这是一个可选的声明,用于确保所有视图修改都符合视图的SELECT语句的条件。

(1) 行列子集视图

若一个视图是从单个基本表导出的,并且只是去掉了基本表的某些行和某些列,但保留了码,则称这类视图为行列子集视图。

建立计科 0701 班学生的视图,并要求在进行修改和插入操作时仍需保证该视图中只有计算机系的学生。

CREATE VIEW CS_S
AS
SELECT Sno, Sname, Sage
FROM S
WHERE Sclass ='CS0701'
WITH CHECK OPTION;

(2)由视图导出的视图

在已有视图的基础上创建新的视图。例如,基于CS_S视图,创建一个新视图,包含选修03号课程的学生信息:

CREATE VIEW CS_S1(Sno, Sname, Grade) AS
SELECT S.Sno, Sname, Grade
FROM CS_S, SC
WHERE CS_S.Sno = SC.Sno AND SC.Cno = '03';

(3) 带虚拟列的视图

定义视图时可以根据应用的需要,设置一些派生属性列。这些派生属性列由于在基本表中并不实际存在,因此也称它们为虚拟列。带虚拟列的视图也称为带表达式的视图。

定义一个反映学生出生年份的视图。

CREATE VIEW BS(Sno,Sname,Sbirth)
AS
SELECT Sno, Sname,2011 - Sage
FROM S:

BS 视图是一个带表达式的视图。视图中的出生年份值是通过计算得到的。

(4) 带有集函数的视图

还可以用带有集函数和 GROUP BY 子句的查询来定义视图,这种视图称为分组视图。

将学生的学号及他们的平均成绩定义为一个视图。

CREATE VIEW S_G(Sno, Gavg)
	AS
		SELECT Sno,AVG(Grade)
		FROM SC
		GROUP BY Sno;

2.删除视图

格式:

DROP VIEW <视图名>;

视图删除后视图的定义将从数据字典中删除,但由该视图导出的其他视图定义仍在数据字典中,但已经失效,不能继续使用,应该将它们一一删除。

DROP VIEW CS_S1;
DROP VIEW CS_S;

二.查询视图

查询视图时,可以像查询基本表一样操作。以下是视图查询的详细说明:

视图查询的基本操作

例如,查询计算机科学专业 0701 班年龄小于 20 岁的学生:

SELECT Sno,Sage FROM CS_S WHERE Sage < 20;

视图查询的内部机制

  • 有效性检查:数据库管理系统(DBMS)首先检查所查询的表或视图是否存在。
  • 视图消解:DBMS 从数据字典中获取视图定义,并将视图定义中的子查询与用户查询结合转换为针对基本表的查询。

例如,上述视图查询实际转换为针对基本表的查询:

SELECT Sno Sage FROM S WHERE Sclass ='CS0701' AND Sage < 20;

查询转换的注意事项

在大多数情况下,视图查询可以直接转换。但在某些情况下,直接转换可能不可行或会导致问题。

  • 带集函数的视图查询:例如,查询平均成绩在 90 分以上的学生学号和平均成绩:
SELECT *
FROM S_G
WHERE Gavg >= 90;

将上面查询语句与子查询结合,形成下列查询语句。

SELECT Sno,AVG( Grade)
FROM SC
WHERE AVG(Grade)> = 90
GROUP BY Sno;

前面讲过分组后 WHERE 子句中不能用集函数作为条件表达式,因此执行此修正后的查询将会出现语法错误。正确的查询语句应该是:

SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno
HAVING AVG( Grade)> = 90;

视图查询的限制

  • 行列子集视图:大多数数据库系统能够正确转换行列子集视图的查询。
  • 非行列子集视图:对于非行列子集的视图,转换可能不总是可行。在这种情况下,建议直接对基本表进行查询。

三.更新视图

由于视图不实际存储数据,对视图的更新实际上是对其基本表数据的更新。使用 WITH CHECK OPTION 可以确保视图更新操作符合视图定义的约束。

1.插入视图数据

向视图中插入数据会转换为向基本表中插入数据。例如,向计科 0701 班学生视图 CS_S 中插入一个新的学生记录:

INSERT INTO CS_S
VALUES('2007111003','王欢', 20);

此操作转换为对基本表的插入:

INSERT INTO S(Sno, Sname, Sage, Sclass)
VALUES('2007111003', '王欢', 20, 'CS0701');

系统会自动处理与视图定义相关的其他属性(如在这里自动添加班级名称 ‘CS0701’)。

2.删除视图数据

从视图中删除数据转换为从基本表中删除相应的数据。例如,删除计科 0701 班学生视图 CS_S 中学号为 2007111003 的记录:

DELETE FROM CS_S
WHERE Sno = '2007111003';

转换为对基本表的删除操作:

DELETE FROM S
WHERE Sno = '2007111003' AND Sclass = 'CS0701';

3.修改视图数据

修改视图数据转换为对基本表的更新。例如,将计科 0701 班学生视图 CS_S 中学号为 2007111001 的学生的姓名改为“张强”:

UPDATE CS_S
SET Sname = '张强'
WHERE Sno = '2007111001';

转换为对基本表的更新:

UPDATE S
SET Sname = '张强'
WHERE Sno = '2007111001' AND Sclass = 'CS0701';

可更新性的限制

不是所有视图都可更新。特别是那些包含集函数、分组或从多个基本表派生的视图,其更新可能不会有唯一明确的基本表更新对应。如视图 S_G,其包含了平均成绩,这是一个通过分组和聚合计算得出的结果,无法直接映射到基本表的特定记录上进行更新。

UPDATE S_G
SET Gavg = 90
WHERE Sno='2007111001'; /*这是不行的*/

因此,对于非行列子集视图的更新,需要考虑其可更新性以及如何有效地映射到基本表的更新操作。文章来源地址https://www.toymoban.com/news/detail-787418.html

到了这里,关于【数据库原理】(13)视图的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SQL Server数据库 -- 索引与视图

    一、索引 聚集索引 非聚集索引 二、视图 三、自定义函数 标量函数 表值函数 四、游标 五、总结 在学习完创建库表、查询等知识点后,为了更加方便优化数据库的存储和内容,我们需要学习一系列的方法例如索引与视图等等,从而使我们更加熟练和使用数据库,突破表面,

    2024年02月14日
    浏览(53)
  • GaussDB云数据库SQL应用系列-视图管理

    一、前言 GaussDB是一款基于云计算技术的高性能关系型数据库,支持多种数据模型和分布式架构。在GaussDB中,视图管理是非常重要的一项功能,它可以帮助用户更方便地管理和查询数据。 数据库视图管理是指对数据库中的视图进行创建、修改、删除、查询等操作的过程。 参

    2024年02月06日
    浏览(118)
  • SQL Server判断数据库、表、列、视图、存储过程、函数是否存在

    在写一些业务逻辑相对复杂点的存储过程的时候,经常会用到临时表或者数据表作为临时结果的保存。但每次在作表是否存在的判断时,往往想不起完整的SQL写法。因此,记录一些常用的数据库对象是否存在的判断方法,可以达到快速查找的目的。正是:好记性不如烂笔头。

    2024年02月02日
    浏览(128)
  • SQL server设置用户只能访问特定数据库、访问特定表或视图

    在实际业务场景我们可能需要开放单独用户给第三方使用,并且不想让第三方看到与业务不相关的表或视图,我们需要在数据库中设置一切权限来实现此功能: 1.创建用户名 选择默认数据库 服务器角色默认为public 用户映射选择指定数据库 打开需要开放权限的数据库,这里我

    2023年04月09日
    浏览(78)
  • 数据库系统原理及MySQL应用教程实验六视图创建与管理

    1.理解视图的概念。 2.掌握创建、更改、删除视图的方法。 3.掌握使用视图来访问数据的方法。 1.验证性实验:在job数据库中,有聘任人员信息表:Work_lnfo表对其视图的操作。 2.设计性试验:在学生管理系统中,有学生信息表studentinfo表对其视图的操作。 (一)验证性实验 在

    2024年02月04日
    浏览(89)
  • 【数据库原理】MyShop 商城数据库设计(SQL server)

    声明:未经允许,请勿转载 MyShop商城是一个在线购物平台,致力于提供便捷的购物体验。为了满足用户需求,商城需要一个可靠、高效的数据库系统来管理商品、用户和订单信息。数据库系统应具备性能、可靠性和扩展性,并通过合理的设计和优化提高系统的响应速度和数据

    2024年02月11日
    浏览(61)
  • 《数据库原理》实验六 SQL数据查询实验

    本系列传送门: 实验二 SQL Server SSMS工具创建和管理数据库及数据表 实验三 SQL Server SSMS工具添加数据 实验四 SQL的数据定义语句 实验五 数据库完整性约束的实现与验证 实验六 SQL数据查询实验 实验六(2) SQL数据查询—连接查询 实验七 SQL的数据更新和视图 实验八 T_SQL编程

    2024年02月03日
    浏览(101)
  • ​数据库原理及应用上机(实验二 SQL数据定义功能实验)

    ✨ 作者:命运之光  ✨ 专栏:数据库原理及应用上机实验   目录 ✨一、实验目的和要求 ✨二、实验内容与步骤 ✨三、附加练习 ✨四、实验总结 🍓🍓 前言:   数据库原理及应用上机实验报告的一个简单整理后期还会不断完善 🍓🍓 1.掌握利用SQL查询分析器和企业管理

    2024年02月05日
    浏览(47)
  • 4、hive的使用示例详解-事务表、视图、物化视图、DDL(数据库、表以及分区)管理详细操作

    1、apache-hive-3.1.2简介及部署(三种部署方式-内嵌模式、本地模式和远程模式)及验证详解 2、hive相关概念详解–架构、读写文件机制、数据存储 3、hive的使用示例详解-建表、数据类型详解、内部外部表、分区表、分桶表 4、hive的使用示例详解-事务表、视图、物化视图、DDL

    2024年02月09日
    浏览(51)
  • 数据库原理与应用(SQL)——2、关系数据库(E-R图、关系模式、关系运算、关系代数)

      目录 关系  关系运算   元组、域关系演算表达式  题目  关系代数表达式——例 元组演算表达式——例  域演算表达式——例         关系数据库是以 二维表 形式组织数据,应用数学方法处理数据库组织的方法。目前关系数据库系统在数据管理中已占据了主导地位

    2023年04月08日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包