视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
SQL视图详细介绍
2020-11-09 09:10:17 责编:小采
文档

视图

视图是虚拟的表。与包含的数据表不一样,视图只包含使用时动态检索的数据查询。作为视图,他不包含任何列或数据,包含的只是一个查询。

为什么使用视图?

1:重用sql语句。

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

3:使用表的一部分而不是整个表。

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

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

创建视图之后,可以用于表基本相同的方式使用它们。可以对视图执行SELECT操作,过滤和排序数据,将视图联结到其他视图或表。

重要的是,要知道视图仅仅是用来查看存储在别处数据的一种设置。视图本身不包含数据,因此返回的数据是从其他表中检索出来的。在添加和更改这些表中的数据的时候,视图将返回改变过的数据。

关于视图创建和使用的一些最常见的规则和

(1)与表一样,视图必须唯一命名

(2)对于可以穿件的视图数目没有

(3)为了创建视图,必须具有足够的访问权限。这些权限通常由数据库管理人员授予。

(4)视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图。

(5)许多DBMS禁止在视图查询中使用ORDER BY子句。

(6)有的DBMS要求命名返回的所有列,如果列是计算字段,则需要使用别名。

(7)视图不能索引,也不能有关联的触发器或默认值。

(8)有的DBMS把视图作为只读的查询,这表示可以从视图检索数据,但不能将数据写会底层表。

(9)有的DBMS允许创建这样的视图,它不允许进行导致行不再属于视图的插入或更新。

创建视图

视图用CREATE VIEW语句来创建。

用DROP语句来删除视图,语法为:DROP VIEW viewname;

利用视图简化复杂的联结

CREATE VIEW ProductCustomers ASSELECT cust_name,cust_contact,prod_idFROM Customers,Orders,
OrderItemsWHERE Customers.cust_id = Order.cust_id AND OrderItems.order_num = Order.order_num;

这条语句创建一个名为ProductCustomers的视图,他联结三个表,以返回已订购了任意产品的所有客户的列表。

检索订购了产品RGAN01的客户

SELECT cust_name,cust_contactFROM ProductCustomersWHERE prod_id = 'RGAN01';

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

创建格式化视图

CREATE VIEW VendorsLocations ASSELECT RTRM(vend_name) || ' ( ' || RTRIM(vend_country) || ' ) ' AS vend_titleFROM Vendors;

用试图过滤不想要的数据

定义CustomerEMailList 视图,过滤没有电子邮件地址的客户。

CREATE VIEW CustomerEMailList ASSELECT cust_id, cust_name, cust_emailFROM CustomersWHERE cust_email IS NOT NULL;

使用视图与计算字段

检索某个特定订单中的物品,计算每种物品的总价格

CREATE VIEW OrderItemExpanded ASSELECT order_num, prod_id, quantity, item_price, quantity*item_price AS expanded_price
FROM OrderItems;

根据视图检索订单20008的详细内容

SELECT *FROM OrderItemsExpandedWHERE order_num = 20008;

下载本文
显示全文
专题