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

相关推荐
S1998_1997111609•X16 小时前
论当今社会主义与人文关怀人格思想下的恶意仿生注入污染蜜罐描述进行函数值非法侵入爬虫的咼忄乂癿〇仺⺋.
数据库·网络协议·百度·ssh·开闭原则
倔强的石头_17 小时前
kingbase备份与恢复实战(六)—— 备份自动化与保留策略:Windows任务计划+日志追溯
数据库
轻刀快马17 小时前
别被 ORM 框架宠坏了:从一场“订单消失”悬案,看懂 MySQL 为什么要强推 InnoDB
数据库·mysql
学网安的肆伍18 小时前
【043-WEB攻防篇】PHP应用&SQL注入&符号拼接&请求方法&HTTP头&JSON&编码类
sql·安全·php
后端漫漫19 小时前
Redis 客户端工具体系
数据库·redis·缓存
PaperData20 小时前
1988-2025年《中国人口和就业统计年鉴》全年份excel+PDF
数据库·人工智能·数据分析·经管
星河耀银海21 小时前
C语言与数据库交互:SQLite实战与数据持久化
c语言·数据库·sqlite·交互
过期动态21 小时前
MySQL中的约束
android·java·数据库·spring boot·mysql
程序员陆通21 小时前
月烧 400 刀到不到 20 刀:我是怎么把 OpenClaw 的 Token 账单砍掉 95% 的
java·前端·数据库
Shan120521 小时前
站在计算机领域视角看:SQL注入攻击
网络·数据库·sql