--视图

 

--视图是虚拟的表。视图不存放数据, 视图只包含使用时动态检索数据的查询。

/*为什么使用视图

1.重复使用sql语句。
2.简化复杂的SQL操作,在编写查询后 可以方便的重用他而不必知道其基本查询细节。
3.使用表的一部分而不是整个表。 避免冗余。
4.保护数据。可以授权用户访问表的特定部分权限,而不是整个表的访问权限。
5.更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。
6.视图极大的简化了复杂的SQL语句的使用,利用视图,可一次性编写基础的sql。然后根据需要多次使用。
(性能问题:因为视图本身不包含数据,每次使用视图时都必须处理查询执行时需要的所有检索。如果你使用了复杂的视图或者嵌套了视图,性能可能会下降的很厉害。)
*/

/* 视图的规则和限制
1.视图名称和表名称一样,不可以重复。
2.视图创建的数量没有限制。
3.需要DBMS中不允许视图查询使用order by(ORDER BY)。
4.创建视图必须有足够的权限。权限一般是数据库管理员授权。
5.视图可以嵌套,即可以利用从其他视图中检索的查询来构建视图。
6.视图不能索引,也不能有关联的触发器或默认值。

/*

go
create view Productcustomers AS 
select cust_name ,cust_contact,prod_id from Customers,OrderItems,Orders where Customers.cust_id=Orders.cust_id and Orders.order_num=OrderItems.order_num  ;
goselect * from products where vend_id in ('DLL01','BRS01');
 
SELECT cust_name,cust_contact FROM Productcustomers WHERE prod_id='rgan01';
 
SELECT * FROM Products;
SELECT * FROM OrderItems;
go
CREATE VIEW test01 AS SELECT ORDERITEMS.prod_id, PROD_NAME,PROD_PRICE ,ORDER_NUM ,ITEM_PRICE FROM Products,OrderItems  WHERE Products.prod_id=OrderItems.prod_id;
gogo
CREATE VIEW test02 AS SELECT ORDERITEMS.prod_id, PROD_NAME,PROD_PRICE ,ORDER_NUM ,ITEM_PRICE FROM Products,OrderItems  WHERE Products.prod_id=OrderItems.prod_id;
goDROP VIEW TEST02;
select * from test01;--go 语句用来分隔,   每个被go分隔的语句都是一个单独的事务,与其他事务不互相收影响。   一个语句失败不会影响其他语句。
go
select * from sysobjects where id=a
go
select getdate()
go