SQL第18课——使用视图

什么是视图?怎样工作的?何时使用它们?如何利用视图简化某些SQL操作?

18.1 视图

视图是虚拟的表,只包含使用时,动态检索数据的查询。

**例:**第12课用下面的select语句从三个表中检索数据:

假如可以把整个查询包装成一个名为productcustomers的虚拟表,则可以如下轻松地检索出相同的数据:

这就是视图的作用,productcustomers是一个视图,作为视图,不包含任何列或数据,包含的是一个查询(与上面用以正确联结表的查询相同)

18.1.1 为什么使用视图

视图的一些常见应用:

  1. 重复用SQL语句;

  2. 简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道其基本查询细节;

  3. 使用表的一部分而不是全部;

  4. 保护数据。可以授予用户访问表的特定部分的权限,而不是整个;

  5. 更改数据格式和表示。视图可以返回与底层表的表示和格式不同的数据。

创建视图后,与表基本相同的方式使用它们。可以对视图执行select操作,过滤和排序数据,将视图联结到其他视图或者表,甚至添加和更新数据

!!!视图仅仅是用来查看存储在别处数据的一种设施,本身不包含数据,返回的数据是从其他表中检索出来的。在添加或更改这些表中的数据时,视图将返回改变过的数据。

18.1.2 视图的规则和限制

|-------------------------------------------------------------------------------|
| 1. 唯一命名视图(与表一样) |
| 2. 可以创建的视图数目没有限制 |
| 3. 创建视图,必须要有足够的访问权限,权限由数据库管理人授予 |
| 4. 可以嵌套。从其他视图中检索数据的查询来构造视图,所允许的嵌套层数在不同的DBMS中有所不同(嵌套视图会严重降低查询的性能,使用前,需要进行全面测试) |
| 5. 许多DBMS禁止在视图查询中使用order by子句 |
| 6. 有些DBMS要求对返回的所有列进行命名,列是计算字段时,需要使用别名 |
| 7. 视图不能索引,也不能有关联的触发器或默认值 |
| 8. 有些DBMS把视图作为只读的查询,即可以从视图检索数据,但不能将数据写回底层表。 |
| 9. 有些DBMS允许创建这样的视图,不能进行导致行不再属于视图的插入或更新。(就是改变数据之后,创建的视图也随之改变) |
[视图创建和使用的最常见的规则和限制]

18.2 创建视图

create view创建视图,只能用于创建不存在的视图。

删除视图,用drop语句,语法为:drop view viewname; 覆盖或(更新)视图,必须先删除它,然后再重新创建。

18.2.1 利用视图简化复杂的联结

例:创建一个名为productcustomers的视图,联结三个表。

检索订购产品rgan01的顾客:

利用视图,可一次性编写基础的SQL,然后根据需要多次使用。

**!!!**创建不绑定特定数据的视图是一种好办法,这样做不需要创建和维护多个类似视图。

18.2.2 用视图重新格式化检索出的数据

视图的另一常见用途是重新格式化检索出的数据

假设经常需要这个格式的结果,不必在每次需要时执行这种拼接,而是创建一个视图,使用它即可。

18.2.3 用视图过滤不想要的数据

过滤没有电子邮件地址的顾客。

18.2.4 使用视图与计算字段

将其转化为一个视图:

(多了检索出order_num列)

检索订单20008的详细内容(上面的输出),如下进行:

相关推荐
周胡杰19 分钟前
鸿蒙arkts使用关系型数据库,使用DB Browser for SQLite连接和查看数据库数据?使用TaskPool进行频繁数据库操作
前端·数据库·华为·harmonyos·鸿蒙·鸿蒙系统
wkj00123 分钟前
navicate如何设置数据库引擎
数据库·mysql
赵渝强老师26 分钟前
【赵渝强老师】Oracle RMAN的目录数据库
数据库·oracle
暖暖木头27 分钟前
Oracle注释详解
数据库·oracle
御控工业物联网44 分钟前
御控网关如何实现MQTT、MODBUS、OPCUA、SQL、HTTP之间协议转换
数据库·sql·http
GJCTYU2 小时前
spring中@Transactional注解和事务的实战理解附代码
数据库·spring boot·后端·spring·oracle·mybatis
MicroTech20252 小时前
微算法科技(NASDAQ: MLGO)探索Grover量子搜索算法,利用量子叠加和干涉原理,实现在无序数据库中快速定位目标信息的效果。
数据库·科技·算法
Code季风2 小时前
SQL关键字快速入门:CASE 实现条件逻辑
javascript·数据库·sql
weixin_478689762 小时前
操作系统【2】【内存管理】【虚拟内存】【参考小林code】
数据库·nosql
九皇叔叔3 小时前
【7】PostgreSQL 事务
数据库·postgresql