玖叶教程网

前端编程开发入门

SQL 基础学习使用视图(十六)

#文章首发挑战赛#

什么是视图

视图(View)是一种虚拟的表,它是基于一个或多个实际表的查询结果构建的,它可以被视为一个预定义的查询,可以简化复杂的查询操作,并提供了一种方便的方式来访问和组织数据。通过使用视图,你可以隐藏实际表的复杂性,只暴露出需要的数据。比较难以理解,看案例比较好理解

例如:(这是我们《sql基础学习高级联结(十一)》中的案例)

SELECT customers.cust_name,
		orders.order_num ,
		orderitems.quantity,
		SUM(orderitems.item_price* orderitems.quantity) AS OrderTotal
FROM customers, orders,orderitems
WHERE orders.order_num = orderitems.order_num  AND orders.cust_id = customers.cust_id AND orderitems.quantity >= 100
GROUP BY 
     customers.cust_name,
		orders.order_num,
	orderitems.quantity;

假如将整个查询句封装为一个名为COO的虚拟表,就可轻松检索相同的数据

SELECT  cust_name,
		orders.order_num 
FROM COO
WHERE quantity >= 100

创建视图

使用CREATE VIEW创建不存在的视图

CREATE VIEW  COO AS   
SELECT customers.cust_name,
		orders.order_num ,
		orderitems.quantity,
		SUM(orderitems.item_price* orderitems.quantity) AS OrderTotal
FROM customers, orders,orderitems
WHERE orders.order_num = orderitems.order_num  AND orders.cust_id = customers.cust_id AND orderitems.quantity >= 100
GROUP BY 
     customers.cust_name,
		orders.order_num,
	orderitems.quantity;

这条语句创建了一个条名为COO的视图,它联结了三张表customers, orders,orderitems,返回了订单数量大于100的客户,如果执行SELECT * FROM COO将列出所有订单大于100的客户的信息。

我用的DBeaver,创建的视图位于表的下面

我们想获取Village Toys的订单信息

SELECT * FROM coo 
WHERE cust_name = 'Village Toys' 

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

SELECT CONCAT( RTRIM(cust_name) , ' (', CAST(RTRIM(order_num) AS CHAR), ')' ) AS name_num 
FROM coo 
ORDER BY cust_name;

删除视图

DROP VIEW IF EXISTS coo;     --DROP VIEW IF EXISTS 视图名

  -- 批量删除  DROP VIEW IF EXISTS 视图名, 视图名;

为什么使用视图

1、重用sql

2、简化复杂的sql语句,相当于封装了一个公共的查询语句,不用重复书写

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

4、保护数据。授权用户访问表的特定部分

这里需要注意性能问题,如果多表联结和过滤创建了复杂的视图,最好提前测试下性能是否需要使用视图。


视图的规则和限制

1、与表一样视图必须是唯一命名(视图不能与别的视图或则表名一样)

2、对于可以创建的视图数量没有限制

3、创建视图必须有足够的访问权限

4、视图可以嵌套,利用从其它视图中检索出来的数据构建新视图

5、一些DBMS工具在试图查询中禁止使用ORDER BY的

6、视图不能索引,也不能有关联的触发器或则默认值

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言