说到视图view,大家应该都很熟悉。如几何学中用三视图来描述集合物体的外观构成,三视图中反应出物体的面貌。这里我们讨论数据库中视图的概念:

  • 什么是视图
  • 为什么会有会用视图
  • 怎样使用视图
  • 视图与表的异同点

1.什么是视图

视图:以一定的视角看数据。即视图是一张虚拟的表,本身不存储任何数据,数据都来源于实际的表中。有查询的SQL构成,查询的SQL的结果可以看成是一张虚拟的表即是一种看待的数据的方式,所以这种操作实际就是数据视图。

注:是不是和三视图有点像,都是实物的虚拟描述。

看一个例子加深认识:

CREATE VIEW ProductsView AS SELECT cust_name, cust_contact
FROM Customers, Orders, OrderItems
WHERE Customers.cust_id = Orders.cust_id
AND OrderItems.order_num = Orders.order_num

使用视图:

SELECT * FROM ProductView WHERE order_num = 'shang1';

这就是视图的应用,基于查询检索创建视图描述,然后查询时直接使用视图。

2.为什么要用视图

上面说到视图基于查询SQL,是一张虚表。从定义描述中可以看出,使用视图会带来以下的好处:

  • 把复杂的查询SQL简化,为复杂的SQL创建视图,应用中只要根据条件过滤查询视图即可
  • 基于视图,可以重复利用SQL,一次编写,多次运行
  • 视图既然是基于查询SQL,那么可以对返回的结果做一定的控制,所以视图可以用来做一定的权限控制

3.怎样使用

现在有三张表:学生表,课程表,选课表

如果需要查询张三选了那些课程信息:

SELECT c.id FROM scourse AS sc INNER JOIN student AS s ON sc.c_id = s.c_id AND s.name = '张三';

以上需要连接查询,SQL较为复杂,可以创建视图:

CREATE VIEW SCVIEW AS 	SELECT c.id FROM scourse AS sc INNER JOIN student AS s ON sc.c_id = s.c_id;

然后查询时:

SELECT * FROM SCVIEW WHERE name  = '张三';

这样就起到SQL简化的作用了

同样如果需要查询李四选修的课程:

SELECT * FROM SCVIEW WHERE name  = '李四';

这样就可以重复利用SQL了

4.视图与表的异同点

1.相同点

  • 都可以用于检索数据
  • 查询时语法相同,都是使用SELECT、FROM、WHERE子句
  • 视图和表都可以连接嵌套查询

2.差异点

  • 视图是虚表,没有关于列的定义,而表有列定义
  • 视图是虚表,只是一种表示数据的方式,而表时物理实体,存储实际的行数据
  • 视图不能修改数据,而表可以修改数据
  • 视图上不能创建索引,表上可以创建索引
参考

《SQL必知必会》

SQL系列(十四)—— 视图(view)的更多相关文章

  1. struts2官方 中文教程 系列十四:主题Theme

    介绍 当您使用一个Struts 2标签时,例如 <s:select ..../>  在您的web页面中,Struts 2框架会生成HTML,它会显示外观并控制select控件的布局.样式和 ...

  2. 闯祸了,生成环境执行了DDL操作《死磕MySQL系列 十四》

    由于业务随着时间不停的改变,起初的表结构设计已经满足不了如今的需求,这时你是不是想那就加字段呗!加字段也是个艺术活,接下来由本文的主人咔咔给你吹. 试想一下这个场景 事务A在执行一个非常大的查询 事务 ...

  3. 学习ASP.NET Core Razor 编程系列十四——文件上传功能(二)

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  4. MP实战系列(十四)之分页使用

    MyBatis Plus的分页,有插件式的,也有其自带了,插件需要配置,说麻烦也不是特别麻烦,不过觉得现有的MyBatis Plus足以解决,就懒得配置插件了. MyBatis Plus的资料不算是太 ...

  5. 第二天,导出文件sql,查询,视图view,聚合函数,反模式,字符串处理函数

    //把数据库导出到脚本文件mysqldump -uroot -p1234 --databases abc > d:/a/abc.sql CREATE TABLE stud( id INT PRI ...

  6. Influx Sql系列教程四:series/point/tag/field

    influxdb中的一条记录point,主要可以分为三类,必须存在的time(时间),string类型的tag,以及其他成员field:而series则是一个measurement中保存策略和tag集 ...

  7. Django 框架篇(四) : 视图(view)详解 以及 路由系统(url)

    |--Django的View(视图) |-- CBV和FBV: |-- 给视图增加装饰器: |-- request对象: |-- response对象: |-- Django的路由系统(url): | ...

  8. WPF入门教程系列十四——依赖属性(四)

    六.依赖属性回调.验证及强制值 我们通过下面的这幅图,简单介绍一下WPF属性系统对依赖属性操作的基本步骤: 借用一个常见的图例,介绍一下WPF属性系统对依赖属性操作的基本步骤: 第一步,确定Base ...

  9. BizTalk开发系列(十四) XML空白字符(WhiteSpace)

    最近在做一个BizTalk项目,对XML文件的处理很复杂.本来是想找有没有方法可以一次性去除XML文件中节点和属性的值的空格.但是找了很久没有看到相关的方法.如果有知道该方法的麻烦跟我讲一下:cbcy ...

  10. 【Qt编程】基于Qt的词典开发系列<十四>自动补全功能

    最近写了一个查单词的类似有道词典的软件,里面就有一个自动补全功能(即当你输入一个字母时,就会出现几个候选项).这个自动补全功能十分常见,百度搜索关键词时就会出现.不过它们这些补全功能都是与你输入的进行 ...

随机推荐

  1. H5新增form控件和表单属性

    第一个知识点:表单的属性及总结 第二个知识点:H5新增的表单控件和属性以及总结 第一个知识点: 我们常见的表单验证有哪些呢 text 文本框标签 password 密码框 checkbox 多选框 r ...

  2. 盘点当下大热的7大Github机器学习创新项目

    哪个平台有最新的机器学习发展现状和最先进的代码?没错——Github!本文将会分享近期发布的七大GitHub机器学习项目.这些项目广泛覆盖了机器学习的各个领域,包括自然语言处理(NLP).计算机视觉. ...

  3. 判断cms-暴库-后台查找-密码破解

    1.判断网站CMS类型 判断目标 使用工具: 脚本语言 wvs 御剑     domain明小子 操作系统 wwwscan 啊d pangolin(穿山甲) 搭建平台 站长工具 netpark     ...

  4. xcode运行demo报错:Failed to create provisioning profile.cannot be registered to your development team

    问题:网上下载运行demo,出现Failed to create provisioning profile.cannot be registered to your development team此 ...

  5. JavaScript之保留两位小数

    if (!isNumeric(fm.ChangeFee.value)) { alert("请输入正确的变更费用"); document.getElementsByName('Cha ...

  6. [BZOJ2667][cqoi2012][kcoj]模拟工厂

    题目描述 Description 有一个称为“模拟工厂”的游戏是这样的:在时刻0,工厂的生产力等于1.在每个时刻,你可以提高生产力或者生产商品.如果选择提高生产力,在下一个时刻时工厂的生产力加1:如果 ...

  7. 梅尔倒谱系数特征(Mel-frequency cepstral coefficients,MFCC)

    引言 感知实验表明,人耳对于声音信号的感知聚焦于某一特定频率区域内,而非在整个频谱包络中. MFCC特征是应用非常广泛的语音特征. 语音的MFCC特征是基于人耳感知实验得到,将人耳当成特定的滤波器,只 ...

  8. javaWeb如何转发数据,jsp页面如何接收?

      1.情景展示 现在有一个需求就是:请求达到服务器后,服务器需要将请求的数据传给另一个页面,如何实现? 2.目标分析 通过服务器跳转到页面上,有两种实现方式:一种是转发,一种是重定向. 我们知道转发 ...

  9. 只访问tomcat,不访问项目时,显示指定内容。

      1.情景展示 我们知道,将javaWeb项目部署到tomcat后,访问该项目的url路径构成是: 网路协议+"://"+ip地址+":"+tomcat设定的 ...

  10. Centos开发小计

    1. 生成静态库,linux下库的规则是lib开头 g++ -c code.cpp ar cr libcode.a code.o