数据库视图详细笔记。视图的优点,视图中DML操作的执行规则,视图如何拒绝DML操作,什么是内建视图 您所在的位置:网站首页 在视图中不允许包括什么关键字 数据库视图详细笔记。视图的优点,视图中DML操作的执行规则,视图如何拒绝DML操作,什么是内建视图

数据库视图详细笔记。视图的优点,视图中DML操作的执行规则,视图如何拒绝DML操作,什么是内建视图

2024-07-15 21:16| 来源: 网络整理| 查看: 265

文章目录 视图1. 什么是视图2.视图的优越性3.视图的类型4. 简单视图VS复杂视图5. 创建简单视图6. 用子查询中的列别名创建视图7. 从视图中取回数据8. 创建复杂视图9. 在定义视图时指定列名10. 视图中DML操作的执行规则11. 拒绝DML操作12. 通过工具创建视图13. 删除视图14. 内建视图 备注:本文中使用到的sql为HR用户提供的数据和表。HR用户介绍查看以下链接。 https://blog.csdn.net/weixin_45842494/article/details/122528264

视图

视图是数据库其他对象

1. 什么是视图

可以通过创建表的视图来表现数据的逻辑子集或数据的组合。视图是基于表或另一个视图的逻辑表,一个视图并不包含它自己的数据,它象一个窗口,通过该窗口可以查看或改变表中的数据。视图基于其上的表称为基表。

在这里插入图片描述

2.视图的优越性 视图限制数据的访问,因为视图能够选择性的显示表中的列。视图可以用来构成简单的查询以取回复杂查询的结果。例如,视图能用于从多表中查询信息,而用户不必知道怎样写连接语句。视图对特别的用户和应用程序提供数据独立性。一个视图可以从几个表中取回数据。 3.视图的类型

简单视图和复杂类型

在这里插入图片描述

4. 简单视图VS复杂视图

视图有两种分类:简单和复杂,基本区别涉及DML(NSERT,UPDATE和DELETE)操作。

简单视图:

数据仅来自一个表不包含函数或数据分组能通过视图执行DML操作

复杂视图:

数据来自多个表包含函数或数据分组不允许通过视图进行DML操作 5. 创建简单视图

在这里插入图片描述

示例:

创建一个视图,视图中包含部门id为80的员工的id,名字以及薪水。

create view emp80 as select e.employee_id,e.last_name,e.salary from employees e where e.department_id = 80;

说明:试图本身不会做数据的存储。

select * from emp80;

当我们执行select去查询视图的时候,拿到的数据还是表中的数据,相当于select间接执行了创建视图时执行的查询语句。

6. 用子查询中的列别名创建视图

如果在创建视图的查询语句中包含有列别名,那么列别名将作为视图的列名。

示例:

创建一个视图,包含部门id为50的员工id,使用ID_NUMBER命名该列,包含员工名字使用NAME命名该列,包含员工的年薪使用ANN_SALARY命名该列。

create view emp50 as select e.employee_id id_number,e.last_name name,12*e.salary ann_salary from employees e; 7. 从视图中取回数据

示例一:

查询部门id为80的员工信息,包含他们的id,名字和薪水

select * from emp80; 返回(部分): EMPLOYEE_ID LAST_NAME SALARY ----------- ------------------------- ---------- 165 Lee 6800.00 166 Ande 6400.00 167 Banda 6200.00 168 Ozer 11500.00 34 rows selected

示例二:

查询部门id为50的员工信息,包含他们的id和薪水。

select e.id_number,e.ann_salary from emp50 e; 返回(部分): ID_NUMBER ANN_SALARY --------- ---------- 201 156000 202 72000 203 78000 110 rows selected

说明:当我们使用视图查询数据的时候,只能查询视图中包含的列,不能查询视图中没有的列。

8. 创建复杂视图

在这里插入图片描述

示例:

创建一个视图,包含每个部门的部门名称,部门最低薪水、部门最高薪水以及部门平均薪水。

create view dept_name as select d.department_name,min(e.salary) min_sal,max(e.salary) max_sal,avg(e.salary) avg_sal from employees e,departments d where e.department_id = d.department_id group by d.department_name;

说明:如果视图中包含了函数,必须要给列起别名。

select * from dept_name; 返回(部分): DEPARTMENT_NAME MIN_SAL MAX_SAL AVG_SAL ------------------------------ ---------- ---------- ---------- Development 1000 1000 1000 Administration 4400 4400 4400 Accounting 8300 12008 10154 Executive 17000 24000 19333.3333 12 rows selected 9. 在定义视图时指定列名

示例:

创建一个视图, 包含每个部门的部门名称、部门最低薪水、部门最高薪水以及部门的平均薪水。将部门名称命名为name.最低薪水命名为minsal.最高薪水命名为maxsal、平均薪水命名为avgsal。

create view dept_name1(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;

说明:给列起别名,可以跟在列的后面,也可以在创建时写在as的前面。

10. 视图中DML操作的执行规则

如果视图中包含下面的部分就不能修改数据。

组函数GROUP BY 子句DISTINCT 关键字用表达式定义的列

示例:

删除emp80视图中雇员ID为179的雇员。

delete from emp80 e where e.employee_id = 179;

说明:emp80视图中没有任何组函数,GROUP BY子句,也没有DISTINCT等关键字。

11. 拒绝DML操作

在这里插入图片描述

示例:

创建一个简单视图,包含employees表中的所有数据,但该视图拒绝DML操作。

create view v_emp as select * from employees with read only;

说明:创建视图时在后面加上with read only表示该视图为只读视图,不能被DML操作。

重点:数据库中的对象名称不能重复,包括视图名称不能和表名称重复等等。

delete from v_emp v where v.DEPARTMENT_ID = 179; 返回: ORA-42399: 无法对只读视图执行 DML 操作 12. 通过工具创建视图

在这里插入图片描述 在这里插入图片描述

说明:使用工具创建视图要点击执行来创建视图。

13. 删除视图

在这里插入图片描述

删除视图不会丢失数据,因为视图是基于数据库中的基本表的,视图中不存储数据。

示例:

删除emp90视图。

drop view emp90; 14. 内建视图 内建视图是一个带有别名(或相关名)的可以在SQL语句中使用的子查询。一个主查询的在FROM子句中指定的子查询就是一个内建视图。

内建视图:内建视图由位于FROM子句中命名了别名的子查询创建。该子查询定义一个可以在主查询中引用数据源。

示例:

显示那些雇员低于他们部门最高薪水的雇员的名字、薪水、部门号和他们部门最高的薪水。

select em.last_name,em.department_id,e.maxsal from employees em ,(select e.department_id, max(e.salary) maxsal from employees e group by e.department_id) e where em.department_id = e.department_id and em.salary


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有