17.视图--SQL
一、什么是视图
视图是虚拟的表
为什么使用视图
- 重用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相关推荐
- 物化视图 sql server 1
物化视图,所谓视图实际上是不存储物理信息的(同表相区别,表存储实际的数据和表的索引信息等.),视图仅仅存储 一个select语句而已.而物化视图就要视图也存储实际的数据,这种实际数据,就是索引.ora ...
- 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 时报错 ...
- 创建视图SQL:在SQL Server中创建视图
介绍 (Introduction) In this article, we are going to see how to use the CREATE VIEW SQL statement to c ...
- mysql创建多表视图sql语句_SQL语法(包括建库、建表、建视图、查询、增加、删除、修改)...
SQL语法(包括建库.建表.建视图.查询.增加.删除.修改) SQL分类: DDL-数据定义语言(CREATE,ALTER,DROP,DECLARE) DML-数据操纵语言(SELECT,DELETE ...
- metinfo mysql_Metinfo 5.3.17 前台SQL注入漏洞
Metinfo 8月1日升级了版本,修复了一个影响小于等于5.3.17版本(几乎可以追溯到所有5.x版本)的SQL注入漏洞.这个SQL注入漏洞不受软WAF影响,可以直接获取数据,影响较广. ### 0 ...
- 建立计算机科学系的学生视图,SQL语句练习及答案
sql语句练习题1 数据库有如下四个表格: student(sno,sname,sage,ssex,sdpt) 学生表 系表(dptno,dname) course(cno,cname, gradet ...
- Metinfo 5.3.17 前台SQL注入漏洞分析及实验
2017年08月07日 漏洞分析 作者:phith0n@长亭科技 原文地址:https://paper.seebug.org/371/ Metinfo 8月1日升级了版 ...
- 米拓5.3 mysql支持off,Metinfo 5.3.17 前台SQL注入漏洞分析
Metinfo 8月1日升级了版本,修复了一个影响小于等于5.3.17版本(几乎可以追溯到所有5.x版本)的SQL注入漏洞.这个SQL注入漏洞不受软WAF影响,可以直接获取数据,影响较广. 漏洞出现在 ...
- Oracle创建索引、视图SQL语句
一.索引 1.添加索引 create index 索引对象名 on 索引对应表名(表内索引对象字段名); 例:需创建包含userid属性的userinfo表. create index userid ...
最新文章
- 爬虫python编程与cvi编程_与爬虫无关,简单的用python进行科学运算
- java使用jsp servlet来防止csrf 攻击的实现方法
- ios和android交互差异,Android 和 iOS 主要交互区别整理
- 最优化学习笔记(二)一维搜索
- esp8266 eeprom_ESP8266_08基于flash的数据掉电保护
- 最小二乘法 c 语言程序,最小二乘法采用C语言.docx
- 无线网卡wifi破解
- 汽车电子设计之SBC芯片简单认识
- 关于手机传感器,你需要了解的一些(一)
- 配置CKFinder(Java版)
- 如何登录到你的 WordPress 管理仪表板
- PMP考试科目有什么?
- iOS 拓展,icon,尺寸 开发系列 吕文翰
- 四万亿,让多少人彻夜不眠!
- 对话推荐系统CRS论文精读RevCore: Review-augmented Conversational Recommendation
- Mysql基础入门篇(二)
- 使用IDEA画结构图
- 佳能全民影像大赛颁奖典礼在北京举办;浪潮信息发布新款JBOD产品 | 全球TMT
- 可执行代码和命令执行
- 什么是a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站?