视图(View)
什么是视图
可以通过创建表的视图来表现数据的逻辑子集或数据的组合。视图是基于表或另一个视图的逻辑表,一个视图并不包含它自己的数据,它象一个窗口,通过该窗口可以查看或改变表中的数据。视图基于其上的表称为基表。
视图的优越性
- 视图限制数据的访问,因为视图能够选择性的显示表中的列。
- 视图可以用来构成简单的查询以取回复杂查询的结果。例如,视图能用于从多表中查询信息,而用户不必知道怎样写连接语句。
- 视图对特别的用户和应用程序提供数据独立性,一个视图可以从几个表中取回数据。
简单视图:
- − 数据仅来自一个表
- − 不包含函数或数据分组
- − 能通过视图执行
DML 操作复杂视图:
- − 数据来自多个表
- − 包含函数或数据分组
- − 不允许通过视图进行 DML 操作
创建简单视图:create view+表名+ as+select + 查询的表;
创建一个视图,视图中包含部门 id 为 80 的员工的 id,名字以及薪水
create view AAa as select e.employee_id,e.last_name,e.salary from employees e where e.department_id=80;
创建一个视图,包含部门 id 为 50 的员工 id 使用 ID_ NUMBER 命名该列,包含员工名字使用 NAME 命名该列,包含员工的年薪使用 ANN_SALARY 命名该列。
create view ASD as select e.employee_id id_number,e.last_name name,12*e.salary ann_salary from employees e where e.department_id=50;
创建复杂视图
创建一个视图,包含每个部门的部门名称,部门最低薪水、部门最高薪水以及部门的平均薪水。
create view AAC as select d.department_name,min(e.salary) min,max(e.salary) max,avg(e.salary) avg from employees e,departments d where e.department_id=d.department_id group by d.department_name;
创建一个视图,包含每个部门的部门名称、部门最低薪水、部门最高薪水以及部门的平均薪水。将部门名称命名为 name、最低薪水命名为 minsal、最高薪水命名为 maxsal、平均薪水命名为 avgsal。
create view AAD (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;
视图中 DML 操作的执行规则
如果视图中包含下面的部分就不能修改数据:
- 组函数
- GROUP BY 子句
- DISTINCT 关键字
- 用表达式定义的列
拒绝 DML 操作 : -----with read only;
创建一个简单视图,包含 employees 表中的所有数据,单该视图拒绝 DML 操作。(增删改)
create view ADC as select * from employees with read only;
删除视图:---- drop view AA;
删除名称为 emp90 的视图。
drop view emp90;
内建视图
- 内建视图是一个带有别名 (或相关名) 的可以在 SQL 语句中使用的子查询。
- 一个主查询的在 FROM 子句中指定的子查询就是一个内建视图。
显示那些雇员低于他们部门最高薪水的雇员的名字、薪水、部门号和他们部门最高的薪水。
select em.last_name,em.salary,em.department_id,emp.max from employees em,(select max(