SQL-视图

视图VIEW

含义:是虚拟的表,不包含任何数据,只包含使用时动态检索数据的查询,仅仅用来查看数据,其他表数据变化后,视图的查询重新检索,返回新的数据
作用:简化操作,编写查询后可以建为视图,方便的重用而不必知道基本查询细节;保护数据
使用:创建视图后,可以用与表相同的操作,就像真表一样
性能:每次使用视图时,都重新进行视图包含的这个查询。因此复杂视图、嵌套视图性能下降很厉害。
规则:视图必须唯一命名;确保有权限;禁止ORDER BY;对返回的所有列进行命名;不能索引,不能关联触发器和默认值

1. 创建视图

CREATE VIEW,不能覆盖

-- 查询订购了产品的顾客(内连接,不含空值),创建这个查询的视图
CREATE VIEW ProductsCustomers AS            -- 创建了一个视图
SELECT cust_name,cust_contact,prod_id       -- 完全正常的可独立执行的SELECT语句
FROM Customers,OrderItems,Orders
WHERE Customers.cust_id=Orders.cust_id
  AND OrderItems.order_num=Orders.order_num;
-- 从视图中查询订购了产品RGAN01的顾客
SELECT cust_name,cust_contact
FROM ProductsCustomers
WHERE prod_id='RGAN01';    -- DBMS执行时将此WHERE子句添加到视图定义的查询的WHERE子句后面

– 创建这种没有特定条件的总数据的视图使得视图重用性增加

2. 删除视图

DROP VIEW viewname
修改视图必须删除原视图再重新创建。

– 经常需要某个计算字段时,不必每次都写计算过程,而是建立视图直接使用,本质上DBMS还是每次都计算,只是我们不用每次都写了

-- 将供应商和国家拼接为一个字段返回,创建这个查询的视图
CREATE VIEW VendorsLocation AS
SELECT RTRIM(vend_name)+'('+RTRIM(vend_country)+')' 
	AS vend_title
FROM Vendors;

SELECT * FROM VendorsLocation;
-- 查询订单中的物品,并计算每种物品的总价格,创建这个查询的视图(这样每次查询订单时就不用自己写计算字段了)
CREATE VIEW OrderItemsExpanded AS
SELECT order_num,prod_id,quantity,item_price,quantity*item_price AS expanded_price
FROM OrderItems
-- 查询20008订单的内容
SELECT * 
FROM OrderItemsExpanded
WHERE order_num=20008;

– 当我们经常只想要表的某部分数据时,可对这部分数据创建视图,某种程度上保护了数据

-- 查询有电子邮件的顾客,创建这个查询的视图
CREATE VIEW CustomerEmailList AS
SELECT cust_id,cust_name,cust_email
FROM Customers
WHERE cust_email IS NOT NULL;

SELECT * FROM CustomerEmailList
WHERE cust_name='Fun4ALL';          -- 传递给视图的WHERE会自动组合到视图定义中,总之像正常表一样用就好啦

CONCLUDE: 视图本质上就是查询,只不过包装了人们常用的查询,让我们编写代码进行后续多次这种查询时更方便而已。
– 简言之,封装SELECT语句,以简化数据处理或保护基础数据

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值