视图

视图

视图:view,是一种有结构(有行有列),但是没有结果的虚拟表,

虚拟表的结构来源不是
自己定义的,而是来源对
(select)对应基表中产生的。

创建视图

基本语法

Create
view 视图名称  as select 语句

后面的跟的select语句,可以是普通的查询,也可以是连接查询,也可以是联合查询,子查询

创建单表视图:基表只有一个

创建多表视图:基表有多个

create view my_view1 as

select * from emp;

create view my_view2 as

select * from dept;

create view my_view3 as

select e.*
,d.dname,d.loc from emp as e left join dept as d on e.deptno=d.deptno;

注意创建多表视图时,
其中的字段不能重复

查看视图

Show tables 【like “pattern”】

Desc 视图名称

Show create table 视图名

视图还有一个关键字 view

Show create view my_view1;

使用视图

使用视图的目的为了查询:将视图当做表一样查询即可

Select * from my_view1;

修改视图

视图本身是不可修改的,但是可以修改视图的来源

修改视图:
修改视图来源的select 语句

Alter view 视图名称 as 新的select语句

Alter view my_view1 as

select empno,ename,job,sal,comm,deptno from
emp;

删除视图

Drop view 视图名称

不能用table

drop view my_view22;

视图意义

1. 视图可以节约sql语句,可以将一条复杂的查询语句使用视图进行保存,以后可以直接对视图进行操作

2.  数据安全:视图的操作主要是针对查询,如果对视图结果进行处理(删除),不会影响基表的数据(相对安全)

3.     视图往往在大项目中使用,而且是多系统使用:可以对外提供有用的数据,但是隐藏关键(无用)的数据:数据安全

4.     视图可以对外提供友好型:不同的视图提供不同的数据,对外专门设计

视图数据操作

视图的可以进行数据操作,但是有很多限制

源表也会改变

新增数据

1、可以向单表视图插入数据:插入的字段,必须包含所有非空字段。

insert into my_view1
values(null,‘zs’,‘teach’,2000,200,20)

select *from my_view1;

2、多表视图不能新增数据

删除数据

1、多表视图不能删除数据

2、单表视图可以删除数据

delete from my_view1 where ename =‘zs’;

select *from my_view1;

更新数据

理论上不管是单表视图还是多表视图,数据都是可以更新

视图的更新,会导致基本数据的更新

单表

update my_view1 set sal =sal+100 where
deptno =20

update my_view3 set sal =sal-100 where
deptno =20

视图算法

现象

找出各个部门工资最高的那个人

使用子查询实现

(1)按照工资降序

select * from emp order by sal desc;

(2)按照部门分组

select *from emp group by deptno;.

3

select *from (select * from emp order by
sal desc) t group by t.deptno;

用视图实现

(1)    
按照工资排序之后的数据放到视图中

create view my_view4 as select *from emp
order by sal desc;

(2)    
在视图基础上,按照部分分组

select * from
my_view4 group by deptno;

结果不对 :视图算法用了合并算法

介绍

视图算法:系统对视图以及外部查询视图的select语句的一种解析方式。

视图:可以理解为子查询,2个select,第一个select:得 到视图

视图算法分成3种:

Undefined:未定义(默认)这不是一种算法,是一种推卸责任的算法

告诉系统,视图没有定义算法,系统你自己看着办。

Temptable:临时表算法:先执行视图的select语句,然后在执行外部查询Select语句。

Merge:合并算法,系统在执行select语句之前,会对视图的select和外部查询视图的select语句进行合并,然后执行(效率高)

算法的指定

在创建视图的时候指定算法。

create ALGORITHM
=temptable view my_view5 as select *from emp order by sal desc;

select * from
my_view5 group by deptno;

算法选择

如果视图的select语句中包含一个查询子句(order by,limit),而且很可能该
关键字 执行顺序 比外部查询语句 关键字 靠后 一定要使用使用temptable算法,其他情况下不用指定,默认即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值