一、什么是视图


视图是虚拟的表

为什么使用视图

  • 重用SQL语句。
  • 简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道其基本查询细节。
  • 使用表的一部分而不是整个表。
  • 保护数据。可以授予用户访问表的特定部分的权限,而不是整个表的访问权限。
  • 更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。

警告:性能问题
因为视图不包含数据,所以每次使用视图时,都必须处理查询执行时需要的所有检索。如果你用多个联结和过滤创建了复杂的视图或者嵌套
了视图,性能可能会下降得很厉害。因此,在部署使用了大量视图的应用前,应该进行测试。

 视图的规则和限制

  • 与表一样,视图必须唯一命名(不能给视图取与别的视图或表相同的名字)。
  • 对于可以创建的视图数目没有限制。
  • 创建视图,必须具有足够的访问权限。这些权限通常由数据库管理人员授予。
  • 视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造视图。所允许的嵌套层数在不同的DBMS中有所不同(嵌套视图可能会严重降低查询的性能,因此在产品环境中使用之前,应该对其进行全面测试)。
  • 许多DBMS禁止在视图查询中使用ORDER BY子句。
  • 有些DBMS要求对返回的所有列进行命名,如果列是计算字段,则需要使用别名(关于列别名的更多信息,请参阅第7课)。
  • 视图不能索引,也不能有关联的触发器或默认值。
  • 有些DBMS把视图作为只读的查询,这表示可以从视图检索数据,但不能将数据写回底层表。详情请参阅具体的DBMS文档。
  • 有些DBMS允许创建这样的视图,它不能进行导致行不再属于视图的插入或更新。例如有一个视图,只检索带有电子邮件地址的顾客。如果更新某个顾客,删除他的电子邮件地址,将使该顾客不再属于视图。这是默认行为,而且是允许的,但有的DBMS可能会防止这种情况发生。

二、创建与使用视图


说明:视图重命名

  删除视图,可以使用DROP语句,其语法为DROP VIEW viewname;。
覆盖(或更新)视图,必须先删除它,然后再重新创建。

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

分析▼
这条语句创建一个名为ProductCustomers的视图,它联结三个表,返回已订购了任意产品的所有顾客的列表。如果执行SELECT * FROM
ProductCustomers,将列出订购了任意产品的顾客。

SELECT cust_name, cust_contact
FROM ProductCustomers
WHERE prod_id = 'RGAN01';

分析▼
这条语句通过WHERE子句从视图中检索特定数据。当DBMS处理此查询时,它将指定的WHERE子句添加到视图查询中已有的WHERE子句中,
以便正确过滤数据。

提示:创建可重用的视图
创建不绑定特定数据的视图是一种好办法。例如,上面创建的视图返回订购所有产品而不仅仅是RGA N01的顾客(这个视图先创建)。扩展
视图的范围不仅使得它能被重用,而且可能更有用。这样做不需要创建和维护多个类似视图。

转载于:https://www.cnblogs.com/lbonet/p/7580985.html

17.视图--SQL相关推荐

  1. 物化视图 sql server 1

    物化视图,所谓视图实际上是不存储物理信息的(同表相区别,表存储实际的数据和表的索引信息等.),视图仅仅存储 一个select语句而已.而物化视图就要视图也存储实际的数据,这种实际数据,就是索引.ora ...

  2. MacOS Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : TCP Provider: Error code 0x2746.

    通过降级 mssql-tools 解决 macOS 上 sqlcmd 不能访问 SQL Server 2014 的问题. 最新的 msodbcsql17 在连接 SQL Server 2014 时报错 ...

  3. 创建视图SQL:在SQL Server中创建视图

    介绍 (Introduction) In this article, we are going to see how to use the CREATE VIEW SQL statement to c ...

  4. mysql创建多表视图sql语句_SQL语法(包括建库、建表、建视图、查询、增加、删除、修改)...

    SQL语法(包括建库.建表.建视图.查询.增加.删除.修改) SQL分类: DDL-数据定义语言(CREATE,ALTER,DROP,DECLARE) DML-数据操纵语言(SELECT,DELETE ...

  5. metinfo mysql_Metinfo 5.3.17 前台SQL注入漏洞

    Metinfo 8月1日升级了版本,修复了一个影响小于等于5.3.17版本(几乎可以追溯到所有5.x版本)的SQL注入漏洞.这个SQL注入漏洞不受软WAF影响,可以直接获取数据,影响较广. ### 0 ...

  6. 建立计算机科学系的学生视图,SQL语句练习及答案

    sql语句练习题1 数据库有如下四个表格: student(sno,sname,sage,ssex,sdpt) 学生表 系表(dptno,dname) course(cno,cname, gradet ...

  7. Metinfo 5.3.17 前台SQL注入漏洞分析及实验

    2017年08月07日  漏洞分析                作者:phith0n@长亭科技 原文地址:https://paper.seebug.org/371/ Metinfo 8月1日升级了版 ...

  8. 米拓5.3 mysql支持off,Metinfo 5.3.17 前台SQL注入漏洞分析

    Metinfo 8月1日升级了版本,修复了一个影响小于等于5.3.17版本(几乎可以追溯到所有5.x版本)的SQL注入漏洞.这个SQL注入漏洞不受软WAF影响,可以直接获取数据,影响较广. 漏洞出现在 ...

  9. Oracle创建索引、视图SQL语句

    一.索引 1.添加索引 create index 索引对象名 on 索引对应表名(表内索引对象字段名); 例:需创建包含userid属性的userinfo表. create index userid ...

最新文章

  1. 爬虫python编程与cvi编程_与爬虫无关,简单的用python进行科学运算
  2. java使用jsp servlet来防止csrf 攻击的实现方法
  3. ios和android交互差异,Android 和 iOS 主要交互区别整理
  4. 最优化学习笔记(二)一维搜索
  5. esp8266 eeprom_ESP8266_08基于flash的数据掉电保护
  6. 最小二乘法 c 语言程序,最小二乘法采用C语言.docx
  7. 无线网卡wifi破解
  8. 汽车电子设计之SBC芯片简单认识
  9. 关于手机传感器,你需要了解的一些(一)
  10. 配置CKFinder(Java版)
  11. 如何登录到你的 WordPress 管理仪表板
  12. PMP考试科目有什么?
  13. iOS 拓展,icon,尺寸 开发系列 吕文翰
  14. 四万亿,让多少人彻夜不眠!
  15. 对话推荐系统CRS论文精读RevCore: Review-augmented Conversational Recommendation
  16. Mysql基础入门篇(二)
  17. 使用IDEA画结构图
  18. 佳能全民影像大赛颁奖典礼在北京举办;浪潮信息发布新款JBOD产品 | 全球TMT
  19. 可执行代码和命令执行
  20. 什么是a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站?

热门文章

  1. java中线程的生命周期_Java中的线程生命周期– Java中的线程状态
  2. python 核心数_Python hex()
  3. 使用Visual Studio对项目重命名
  4. 深入了解AI在金融、能源领域的网络安全应用
  5. C++进阶教程之动态内存
  6. OpenCV(一)Mac下OpenCV的安装和配置
  7. UI设计入门:解析设计标注规范和图标规范
  8. 遗留非springboot传统项目接入eureka注册与服务发现
  9. 【动态规划】LeetCode 63. Unique Paths II
  10. 剑指offer——面试题58:二叉树的下一个结点