数据仓库之视图

视图定义

视图是一张虚拟表。它可以是表中数据记录的子集,也可以是表中某几个字段形成的子集。视图可以参照一张或多张基表。视图并不另外单独存储和复制数据,它只是一个结构。视图定义存储在数据字典中,而不是在用户自己的空间里。

创建和使用视图

利用CREATE VIEW命令可以创建视图。需要注意的是,视图是基于一些表来实现的,如果这些表的定义发生了变化,将不会反映到视图的定义中。此时将根据
需要进行手工的同步更新或维护。

CREATE VIEW   VIEW_NAME

AS  SELECT  COLUMN1,COLUMN2

        FROM TABLE

        WHERE COLUMN 3 =字段值

读取此视图的方法和读取普通表无异,eg:SELECT  *  FROM  VIEW_NAME

也可以利用视图来更新记录,eg:UPDATE  VIEW_NAME  SET  COLUMN1 = 值  WHERE COLUMN2 = 值

视图中的连接

在视图中可以包含一个或多个表的列,这时需要使用到多表的连接;举例来说,从雇员表和call_employee表中建立一个视图,作为分派电话使用:
CREATE VIEW employee_call
AS SELECT employee.employee_number
,last_name
,first_name
,call_number
,call_status_code
,assigned_date
,assigned_time
,finished_date
,finished_time
FROM employee
INNER JOIN call_employee
ON call_employee.employee_number
= employee.employee_number;

利用视图重命名列

利用视图可以对列进行重新改名。参考下面的例子:
CREATE VIEW shortcut (emp, dept, last, first, sal)
AS SELECT employee_number
,department_number
,last_name
,first_name
,salary_amount
FROM employee
WHERE department_number = 201;


从视图中选取记录与从普通表无异,这里可以使用已经更名的视图字段,如:
SELECT last
,sal
FROM shortcut
ORDER BY last DESC;


改变视图定义

利用REPLACE语句可修改视图定义;

REPLACE VIEW shortcut (emp, dept, last, first, sal)

AS SELECT employee_number
,department_number
,last_name
,first_name
,salary_amount
FROM employee
WHERE department_number = 301;

另外,利用视图还可以对列标题重新命名和对列进行格式化。如下面创建了一个基于部门201的视图,它具有较好的格式化输出。
CREATE VIEW Report AS
SELECT employee_number AS Emp (FORMAT '9999')
,department_number AS dept (FORMAT '999')
,last_name AS Last (TITLE 'Name')
,first_name AS First (TITLE '')
,salary_amount / 12 AS Monthly_Salary (FORMAT '$$$,$$9.99')
FROM employee
WHERE department_number = 201;

聚合视图(Aggregate View)

聚合视图是指视图的列通过聚合计算而得到的视图。例:建立一个视图依部门汇总工资信息。从这个视图的定义可以看出,聚合或派生出来的列必须要给一个名字。
CREATE VIEW deptsals
AS SELECT department_number AS department
,SUM (salary_amount) AS salary_total
,AVG (salary_amount) AS salary_average
,MAX (salary_amount) AS salary_max
,MIN (salary_amount) AS salary_min
FROM employee
GROUP BY department_number;

使用HAVING的聚合视图

利用HAVING子句,修改上述deptsals视图,使之仅包含平均工资小于$36,000的部门,则语句为:
REPLACE VIEW deptsals
AS SELECT department_number AS department
,SUM (salary_amount) AS salary_total
,AVG (salary_amount) AS salary_average
,MAX (salary_amount) AS salary_max
,MIN (salary_amount) AS salary_min
FROM employee
GROUP BY department_number
HAVING AVG(salary_amount) < 36000 ;


视图的限制和总结

视图的限制:
不能基于视图来建立索引,因为视图只是一个定义,本身没有任何数据
视图中不能包含ORDER BY 子句
派生和聚合的列必须要有一个AS子句指定列名
视图不能被UPDATE,如果它包含:

❍ 数据来自多个表(JOIN VIEW)
❍ 两次同样的列
❍ 派生的列
❍ 包含DISTINCT 子句
❍ 包含GROUP BY 子句

视图的作用和特点:
提供了一个额外的安全、授权层次
帮助控制读和修改权利
如果基表增加了列,该列对视图无影响。
如果列从基表中删除,视图也不受影响,除非删除跟该列相关的视图。
简单化了用户存取

根据视图的特点,对于生产系统,我们建议:
对每一个基表建立至少一个视图
根据需要建立视图查询


 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值