实训四:索引与视图 - SQL视图(teachingdb数据库)

SQL视图的定义与操纵

  • 第1关:创建视图
    • 任务描述
    • 相关知识
      • 视图的定义
      • 创建视图
    • 编程要求
    • 测试说明
    • 参考代码
  • 第2关:创建视图-练习一
    • 任务描述
    • 相关知识
    • 编程要求
    • 测试说明
    • 参考代码

第1关:创建视图

任务描述

本关任务:建立计算机系的学生的视图 student_cs。

相关知识

为了完成本关任务,你需要掌握:

  1. 视图的定义;

  2. 创建视图;

视图的定义

视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。通过视图,可以展现基表(用来创建视图的表)的部分数据;视图数据来自定义视图的查询表。

我们知道了视图的定义,那么,为什么要使用它呢?

因为视图有如下优点:

①. 简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集;

②. 安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行或列,但是通过视图就可以简单的实现;

③. 数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列队视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。

总而言之,使用视图的大部分情况是为了保障数据安全性,提高查询效率。

创建视图

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    VIEW view_name [(column_list)]
    AS select_statement
   [WITH [CASCADED | LOCAL] CHECK OPTION]

参数说明:

  • OR REPLACE:表示替换已有视图;

  • ALGORITHM:表示视图选择算法,默认算法是UNDEFINED(未定义的): MySQL 自动选择要使用的算法 ;merge合并;temptable临时表;

  • column_list:可选参数,指定视图中各个属性的名词,默认情况下与 select 语句中查询的属性相同;

  • select_statement:表示 select 语句;

  • [WITH [CASCADED | LOCAL] CHECK OPTION]:表示视图在更新时保证在视图的权限范围之内;cascade是默认值,表示更新视图的时候,要满足视图和表的相关条件;local表示更新视图的时候,要满足该视图定义的一个条件即可。

示例一:

实训四:索引与视图 - SQL视图(teachingdb数据库)_第1张图片

示例二:

实训四:索引与视图 - SQL视图(teachingdb数据库)_第2张图片

以上两个示例可以看出,虽然两个视图的字段名不同,但是,数据是相同的,因为两个视图引用的是同一个表中的数据,并且,as后的创建视图的语句也相同。

在实际开发中,用户可以根据自己的需求,通过视图的方式,获取基本表中自己需要的数据,这样既能满足用户的需求,也不会破坏基本表原来的结构,从而保证了基本表中数据的安全性。

编程要求

根据提示,在右侧编辑器补充代码:

  • 建立计算机系的学生的视图 student_cs。 student表结构 学生表
    实训四:索引与视图 - SQL视图(teachingdb数据库)_第3张图片

测试说明

编写代码后,点击测评即可。


开始你的任务吧,祝你成功!

参考代码

 use teachingdb;
 /****请在此编写代码,操作完毕之后点击评测******/
 
 /**********Begin**********/
  create view student_cs as select * from student where sdept = '计算机' ;
 /**********End**********/

第2关:创建视图-练习一

任务描述

本关任务: 创建由学号和平均成绩两个字段的视图 v_grade_avg

相关知识

见上一关

编程要求

根据提示,在右侧编辑器补充代码, 创建由学号和平均成绩两个字段的视图 v_grade_avg
成绩表score结构如下:
实训四:索引与视图 - SQL视图(teachingdb数据库)_第4张图片

测试说明

编写代码后,点击测评即可。


开始你的任务吧,祝你成功!

参考代码

 use teachingdb;
 /****请在此编写代码,操作完毕之后点击评测******/
 
 /**********Begin**********/
create view v_grade_avg 
as select sno as '学号',avg(grade) as '平均成绩' from score group by sno;
 /**********End**********/

你可能感兴趣的:(数据库实训,数据库,sql,mysql)