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的详细内容(上面的输出),如下进行:

相关推荐
小光学长4 分钟前
基于ssm的考研复习平台w0ws1848(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库
-大头.6 分钟前
数据库高可用架构终极指南
数据库·架构
Elastic 中国社区官方博客10 分钟前
Elasticsearch:构建一个 AI 驱动的电子邮件钓鱼检测
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
德育处主任Pro16 分钟前
在亚马逊云上解决RDS、MariaDB 与 Aurora MySQL复制延迟实战指南
数据库·mysql·mariadb
l1t21 分钟前
解决PostgreSQL中找不到uniq函数的错误
数据库·postgresql
墨白曦煜28 分钟前
深入剖析 Redis 客户端:Sentinel 模式下的“寻址”与“感知”艺术
数据库·redis·sentinel
水上冰石31 分钟前
harbor使用https之证书生成
服务器·数据库·https
韩zj41 分钟前
服务器定时备份数据库脚本
服务器·数据库·adb
笨蛋少年派1 小时前
Maxwell数据变更捕获工具简介
数据库·mysql
谷新龙0011 小时前
pg_clickhouse插件,在postgresql中借助clickhouse借用OLAP能力
数据库·clickhouse·postgresql