首页 > 数据库 >Oracle 19C学习 - 16. 视图

Oracle 19C学习 - 16. 视图

时间:2022-11-01 12:34:16浏览次数:50  
标签:salary CREATE 视图 DEPARTMENT SELECT Oracle ID 19C

视图是什么

视图几乎在所有的数据库软件中都存在。
视图是在逻辑上代表一个或者多个表的数据子集,和同义词一样,都是映射关系,视图的功能和地位高于同义词。


为什么使用视图

  1. 限制数据访问。
  2. 将复杂查询的结果变成视图,使的将来使用更加容易。
  3. 提供了数据的独立性,可以先访问视图,确定以后再访问表,减少对于数据库的不必要访问。


视图的种类

  1. 简单视图
  2. 复杂视图
                      简单视图                复杂视图
表的数量                  一个                 一个或者多个
包含函数                  不                   包含
是否分组                  不                   包含
支持DML                  是                    不一定

HR用户下,用CTAS创建一个employees的备用表

CREATE TABLE EMP1 AS SELECT * FROM EMPLOYEES;



简单视图

创建简单试图

CREATE VIEW 视图名 AS 子查询

CREATE VIEW EMP_VW1 AS 
   SELECT 
      EMPLOYEE_ID, FIRST_NAME, LAST_NAME, SALARY
   FROM EMP1;

DESC EMP_VW1;
Name        Null     Type         
----------- -------- ------------ 
EMPLOYEE_ID          NUMBER(6)    
FIRST_NAME           VARCHAR2(20) 
LAST_NAME   NOT NULL VARCHAR2(25) 
SALARY               NUMBER(8,2) 

创建或修改简单视图的语句

CREATE OR REPLACE VIEW 视图名
(列1别名, 列2别名...)
AS 查询语句

CREATE OR REPLACE VIEW empvw2
(id, name, sal)
AS 
   SELECT employee_id, first_name || ' ' || last_name, salary
   FROM Employees;

视图的工作原理

使用视图的时候,Oracle进行如下操作:

  1. 从User_Views数据字典中检索视图的定义。
  2. 检查试图基表(上例的EMP1表)的访问权限。
  3. 将视图的查询转换为对基表的操作,数据依然是从基表进行检索,或者对于基表进行相关的DML操作。



复杂视图

创建复杂视图

CREATE OR REPLACE VIEW empvw2
(列名, 列名)
AS 多表查询;

CREATE OR REPLACE VIEW emp_vw_salary
(Department_name, Max_Salary, Min_Salary, Average_Salary)
AS
SELECT D.DEPARTMENT_NAME, MAX(E.salary), MIN(E.SALARY), ROUND(AVG(E.SALARY),2) 
FROM DEPARTMENTS D INNER JOIN EMPLOYEES E
ON D.DEPARTMENT_ID = E.DEPARTMENT_ID
GROUP BY D.DEPARTMENT_NAME;

SELECT * FROM emp_vw_salary;
=>output:
Administration	4400	4400	4400
Accounting	12008	8300	10154
Purchasing	11000	2500	4150


select average_salary from emp_vw_salary where department_name = 'IT';
=>output:
5760



视图上操作DML的规则

  1. 可以在简单视图进行DML操作。
  2. 如果在视图包含以下内容,不能进行DML操作:
    • 分组函数
    • Group By
    • Distinct
    • 伪列Rownum等
    • 由表达式定义的列
    • 基表中存在未被视图选中的Not Null的列。


视图上添加约束条件

不允许修改条件字段的内容

CREATE OR REPLACE 视图名
AS 子查询
WITH CHECK OPTION CONSTRAINT 约束名;

添加约束以后,就无法修改创建视图WHERE子句之后的条件字段了,其他的字段可以修改。

CREATE OR REPLACE VIEW emp_it_salary
(DEPARTMENT_ID, NAME, SALARY)
AS
SELECT DEPARTMENT_ID, FIRST_NAME, SALARY 
FROM employees 
WHERE department_ID = 60
WITH CHECK OPTION CONSTRAINT emp_it_salary_constraint;

UPDATE emp_it_salary
SET department_id = 100;
=> output:
SQL Error: ORA-01402: view WITH CHECK OPTION where-clause violation
01402. 00000 -  "view WITH CHECK OPTION where-clause violation"

让视图只读

CREATE OR REPLACE 视图名
AS 子查询
WITH READ ONLY;

将视图变为只读视图,拒绝所有更改。


删除视图

DROP VIEW 视图名

内联视图

  1. 内联视图是带有可以在SQL中使用的别名[相关名称]的子查询
  2. 主查询FROM 子句中的命名子查询就是一个内联视图实例
  3. 内联视图不是数据对象
SELECT A.FIRST_NAME, A.SALARY, B.DEPARTMENT_ID
FROM employees A inner join 
     (
      SELECT DEPARTMENT_ID, MAX(salary) MAX_SAL
      FROM EMPLOYEES
      GROUP BY DEPARTMENT_ID 
     ) B     -- >这里B就成为一个带有别名的子查询
ON A.DEPARTMENT_ID = B.DEPARTMENT_ID
WHERE A.SALARY < B.MAX_SAL;



排序TOP-N分析

显示EMPLOYEES表中,收入最高的三个人的信息。

SELECT rownum as Rank, first_name, salary
FROM
  (SELECT * FROM employees ORDER BY salary DESC)
WHERE rownum <= 3;
=> output:
1	Steven	24000
2	Neena	17000
3	Lex	17000

标签:salary,CREATE,视图,DEPARTMENT,SELECT,Oracle,ID,19C
From: https://www.cnblogs.com/slqleozhang/p/16847277.html

相关文章

  • Oracle
    #同义词(Synonym)是什么可以把它理解为视图,都是对表的映射,同义词不占用数据存储空间。对于不同Schema下的表,可以映射为一个同义词。易于引用其他用户所拥有的表。还可以缩......
  • Oracle 19C学习 - 15. 同义词
    同义词(Synonym)是什么可以把它理解为视图,都是对表的映射,同义词不占用数据存储空间。对于不同Schema下的表,可以映射为一个同义词。易于引用其他用户所拥有的表。还可以缩......
  • 数据库视图浅析
    关系型数据库中存在三种关系:基本关系(又叫“基本表”,或“基表”),查询表,视图表。在这儿我们就讲讲视图。视图是一张虚表,它并没有真正地保存数据,而是通过一些操作将多个表的数据......
  • SQL触发器和视图的使用
    相关题目:......
  • oracle的length()、lengthb()、to_single_bye()函数
    length('张三')结果:2lengthb('张三')结果:4所以length返回长度为字符个数,lengthb返回长度为字节数to_single_byte():全角转半角函数 ......
  • 利用spring-boot-admin 实现对actuator视图化处理报错
    1.利用spring-boot-admin实现对actuator视图化处理2.报错示例:org.springframework.beans.factory.UnsatisfiedDependencyException:Errorcreatingbeanwithname'in......
  • 4+1 视图及与UML图的映射
    参考​​ArchitecturalBlueprints—The“4+1”ViewModelofSoftwareArchitecture​​​​DDD:4+1视图​​​​wikipedia4+1architecturalviewmodel​​​​tutori......
  • windows 2003 oracle 10.2.0.4 升级迁移到linux 11.2.0.4
    文档课题:windows2003oracle10.2.0.4升级迁移到linux11.2.0.4源端:windows200332位+oracle10.2.0.432位+双实例目标端:centos7.964位+oracle11.2.0.464位应......
  • Oracle问题记录
    概述只稍微熟悉MySQL,但是不可避免会使用Oracle,此文记录Oracle使用问题。问题获取版本号​​SELECTversionFROMPRODUCT_COMPONENT_VERSIONWHEREproductLIKE'OracleDa......
  • Oracle 增删改(INSERT、DELETE、UPDATE)语句
    Ø  简介本文介绍 Oracle 中的增删改语句,即 INSERT、DELETE、UPDATE 语句的使用。是时候展现真正的技术了,快上车:插入数据(INSERT)修改数据(UPDATE)删除数据(DEL......