1、视图总结
视图:基于原始表得到的一个虚拟的查询结果集
视图和表的区别
1. 表中的数据占用物理空间,视图不占用。
2. 表中的数据是实际存在的,视图的数据是执行查询时动态生成的
视图的好处:
1、提高查询语句的重用性,调用简单
2、安全
3、独立
视图的应用场景
1、多个地方用到相同的查询结果
2、查询结果使用了比较复杂的sql语句
一、创建视图:
create [or replace] view 视图名
as
select 语句;
特点:
1、视图的使用和表的使用是一致的,都支持增删改查,而且语法一样
2、如果视图的查询语句中包含一些特殊关键字,则不支持增删改
分组函数、distinct、group by、having、union或者union all
常量视图
Select中包含子查询
join
from一个不能更新的视图
where子句的子查询引用了from子句中的表
二、修改视图
#方式1.如果视图存在,则修改;如果视图不存在,则创建
CREATE OR REPLACE VIEW 视图名
AS
新的查询语句
#方式2.修改视图
ALTER VIEW 视图名 AS
新的查询语句
三、删除视图
可以同时删除多个视图。
语法:drop view 视图1,视图2;
2、创建视图
CREATE VIEW myv1
AS
SELECT * FROM beauty
WHERE id>3;
3、使用视图
(1)查询
SELECT * FROM myv1;
SELECT * FROM beauty;
(2)插入
INSERT INTO myv1 VALUES(14,'罗大磊','男','1998-1-1','111',NULL,NULL);
INSERT INTO myv1 VALUES(2,'马小宁','男','1998-1-1','111',NULL,NULL);
(3)更新
UPDATE myv1 SET NAME='宋茜' WHERE id=6;
(4)删除
DELETE FROM myv1 WHERE id=14;
4、具备以下特点的视图不允许更新
包含以下关键字的sql
语句:分组函数、distinct、group by、having、union
或者 union all
常量视图
Select
中包含子查询
join
from
一个不能更新的视图
where
子句的子查询引用了from
子句中的表
(1)分组函数
CREATE VIEW myv2
AS
SELECT COUNT(*),boyfriend_id
FROM beauty
GROUP BY boyfriend_id;
SELECT * FROM myv2;
UPDATE myv2 SET boyfriend_id = 10 WHERE boyfriend_id=1;
(2)常量视图
DROP VIEW myv3;
CREATE VIEW myv3
AS
SELECT 'china' c;
SELECT * FROM myv3;
UPDATE myv3 SET c='Jap';
(3)select中包含子查询
CREATE VIEW myv4
AS
SELECT (
SELECT MAX(boyfriend_id)
FROM beauty
) a;
SELECT * FROM myv4;
UPDATE myv4 SET a=100;
(4)join
CREATE VIEW myv5
AS
SELECT NAME,boyname
FROM beauty b
JOIN boys bo ON b.boyfriend_id=bo.id;
SELECT * FROM myv5;
UPDATE myv5 SET NAME='安娜' WHERE NAME='热巴';
INSERT INTO myv5 VALUES('刘晓婷','刘婷婷');
(5)from一个不能更新的视图
CREATE VIEW myv6
AS
SELECT * FROM myv5;
SELECT * FROM myv6;
INSERT INTO myv6 VALUES('刘晓婷','刘婷婷');
(6)where子句的子查询,引用了from子句中的表
CREATE VIEW myv7
AS
SELECT last_name
FROM employees
WHERE manager_id IN(
SELECT employee_id
FROM employees
WHERE last_name LIKE '%a%'
)
SELECT * FROM myv7;
UPDATE myv7 SET last_name='hhhh' WHERE last_name='Hunold';
网友评论