现在的位置: 首页 > 综合 > 正文

Oracle 11g 第十一章知识点总结——视图

2013年11月18日 ⁄ 综合 ⁄ 共 3423字 ⁄ 字号 评论关闭

Oracle 11g 第十一章知识点总结——视图

知识点预览

 

复习

视图

 

复习

 

 

--分页 每页显示5条
         --第一页
         select t.*
         from (select rownum sn,ename,job,salfrom emp
                   where rownum <= 1*5) t
                  where t.sn>(1-1)*5;

 

视图

 

1.      常见的数据库对象

 

 


2.      为什么使用视图

a)        控制数据访问

b)        简化查询

c)        数据独立性

d)        避免重复访问相同的数据

3.      简单视图和复杂视图


 


 

4.      创建视图

a)        在CREATE VIEW语句中嵌入子查询

 

CREATE [OR REPLACE] [FORCE|NOFORCE]VIEWview

 [(alias[, alias]...)]

 AS subquery

[WITH CHECK OPTION [CONSTRAINT constraint]]

[WITH READ ONLY [CONSTRAINT constraint]];

 

b)        子查询可以是复杂的 SELECT语句

c)        创建视图举例

 

CREATE VIEW empvu80
 AS SELECT employee_id, last_name, salary
    FROM   employees
    WHERE  department_id = 80;

Viewcreated.

 

d)        描述视图结构

 

DESCRIBE empvu80

 

e)        创建视图时在子查询中给列定义别名

 

CREATE VIEW          salvu50
 AS SELECT  employee_id ID_NUMBER, last_name NAME,
            salary*12ANN_SALARY
    FROM    employees
    WHERE   department_id = 50;

View created.

f)         在选择视图中的列时应使用别名


5.      查询视图

 

SELECT *
FROM        salvu50;

 

 

6.      修改视图

a)        使用CREATE ORREPLACE VIEW 子句修改视图

 

CREATE OR REPLACE VIEW empvu80
  (id_number, name,sal, department_id)
AS SELECT employee_id, first_name || ' ' || last_name,
           salary,department_id
   FROM    employees
   WHERE   department_id = 80;

View created.

b)        CREATE VIEW 子句中各列的别名应和子查询中各列相对应


7.      创建复杂视图

创建复杂视图举例

 

CREATE VIEW   dept_sum_vu
  (name, minsal,maxsal, avgsal)
AS SELECT d.department_name, MIN(e.salary),
             MAX(e.salary),AVG(e.salary)
   FROM      employees e, departments d
   WHERE     e.department_id = d.department_id
   GROUP BY  d.department_name;

View created.


8.      视图中使用DML的规定

a)        可以在简单视图中执行 DML操作

b)        当视图定义中包含以下元素之一时不能使用delete:

                                      i.             组函数

                                    ii.             GROUP BY子句

                                   iii.             DISTINCT关键字

                                   iv.             ROWNUM 伪列 DUAL伪表

c)        当视图定义中包含以下元素之一时不能使用update:

                                      i.             组函数

                                    ii.             GROUP BY子句

                                   iii.             DISTINCT关键字

                                   iv.             ROWNUM 伪列

                                    v.             列的定义为表达式

d)        当视图定义中包含以下元素之一时不能使用insert:

                                      i.             组函数

                                    ii.             GROUP BY子句

                                   iii.             DISTINCT关键字

                                   iv.             ROWNUM 伪列

                                    v.             列的定义为表达式

                                   vi.             中非空的列在视图定义中未包括

 

9.      WITH CHECK OPTION 子句

a)        使用 WITH CHECKOPTION 子句确保DML只能在特定的范围内执行

 

CREATE OR REPLACE VIEW empvu20
AS SELECT         *
   FROM     employees
   WHERE    department_id = 20
   WITH CHECK OPTIONCONSTRAINT empvu20_ck ;

View created.


b)        任何违反WITH CHECKOPTION 约束的请求都会失败


10.  屏蔽 DML 操作

a)        可以使用 WITH READONLY 选项屏蔽对视图的DML操作

b)        任何 DML 操作都会返回一个Oracle server错误

 

CREATE OR REPLACE VIEW empvu10
   (employee_number, employee_name, job_title)
AS SELECT         employee_id, last_name, job_id
  FROM     employees
  WHERE    department_id = 10
  WITH READ ONLY;

View created.


11.  删除视图

 

删除视图只是删除视图的定义,并不会删除基表的数据

DROP VIEW view;

 

DROP VIEW empvu80;

View dropped.


12.  临时视图

a)        临时视图可以是嵌套在 SQL语句中的子查询

b)        在FROM 子句中的的子查询是临时视图

c)        临时视图不是数据库对象


13.  Top-N 分析

a)        Top-N 分析查询一个列中最大或最小的 n 个值:

                                      i.             销售量最高的十种产品是什么?

                                    ii.             销售量最差的十种产品是什么?

b)        最大和最小的值的集合是Top-N 分析所关心的

c)        查询最大的几个值的 Top-N 分析:

 

SELECT [column_list], ROWNUM 

FROM   (SELECT [column_list]

        FROM table

        ORDER  BY Top-N_column)

WHERE  ROWNUM <=  N;

 

d)        查询工资最高的三名员工


 

 

 

 

 

 

 

 

 

抱歉!评论已关闭.