mysql视图

#视图

/* 
含义:虚拟表,和普通表一样使用(可以理解为封装sql语句) 
mysql5.1版本出现的新特性,是通过表动态生成的数据

		创建语法的关键字   	是否实际占用物理空间		 使用 
视图     create view	    只是保存了sql逻辑		  增删改查,只是一般不能增删改 
表	    create table	 保存了数据				增删改查 
*/

#案例:查询姓张的学生名和专业名

SELECT stuname,majorname 
FROM stuinfo s INNER JOIN major m 
ON s.`majorid`= m.`id` 
WHERE s.`stuname` 
LIKE '张%'; 

CREATE VIEW v1 AS 
SELECT stuname,majorname 
FROM stuinfo s INNER JOIN major m 
ON s.`majorid`= m.`id`;  
//7.8.9.10行就是被封装的sql语句

#一、创建视图

/* 语法: 
create view 视图名 
as 
查询语句; 
*/

#1.查询姓名中包含a字符的员工名、部门名和工种信息

#①创建 
CREATE VIEW myv1 
AS 
SELECT last_name,department_name,job_title 
FROM employees e JOIN departments d 
ON e.department_id  = d.department_id 
JOIN jobs j ON j.job_id  = e.job_id; 

#②使用 
SELECT * FROM myv1 WHERE last_name LIKE '%a%';

#2.查询各部门的平均工资级别

#①创建视图查看每个部门的平均工资 
CREATE VIEW myv2 
AS 
SELECT AVG(salary) ag,department_id 
FROM employees 
GROUP BY department_id; 

#②使用 
SELECT myv2.`ag`,g.grade_level 
FROM myv2 JOIN job_grades g 
ON myv2.`ag` 
BETWEEN g.`lowest_sal` AND g.`highest_sal`;

#二、视图的修改

#方式一:

/* 
create or replace view  视图名 
as 
查询语句; 
*/
CREATE OR REPLACE VIEW myv3 
AS 
SELECT AVG(salary),job_id FROM employees 
GROUP BY job_id;

#方式二:

/* 语法: 
alter view 视图名 
as  
查询语句; 
*/
ALTER VIEW myv3 
AS 
SELECT * FROM employees;

#三、删除视图

/* 语法:
drop view 视图名,视图名,...; 
*/
DROP VIEW emp_v1,emp_v2,myv3;

#四、查看视图

SHOW CREATE VIEW myv3;

#五、视图的更新

CREATE OR REPLACE VIEW myv1 
AS 
SELECT last_name,email FROM employees;

#1.插入

INSERT INTO myv1 VALUES('张飞','zf@qq.com');

#2.修改

UPDATE myv1 SET last_name = '张无忌' WHERE last_name='张飞';

#3.删除

DELETE FROM myv1 WHERE last_name = '张无忌';

#具备以下特点的视图不允许更新

#①包含以下关键字的sql语句:分组函数、distinct、group by、having、union或者union all

#②常量视图

#③Select中包含子查询

#④join

#⑤from一个不能更新的视图

#⑥where子句的子查询引用了from子句中的表

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值