MySQL学习记录:第五章 视图

第五章 视图

/*
含义:虚拟表,和普通表一样使用
mysql5.1版本开始提供视图功能,是通过表动态生成的数据是一种虚拟存在的表,行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的;只保存了sgl逻辑,不保存查询结果

应用场景:
多个地方用到同样的查询结果
该查询结果使用的sql语句较复杂

特点
1、重用sql语句
2、简化复杂的sql操作,不必知道它的查询细节
3、保护数据,提高安全性

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

*/

USE student;

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

#创建视图

CREATE VIEW v1
AS
SELECT s.studentname,m.majorname
FROM student s
INNER JOIN major m ON s.majorid=m.majorid
WHERE s.studentname LIKE '%张%';

#从视图查询

SELECT * FROM v1 WHERE studentname LIKE '%张%';

一、创建视图

/*
语法

create view 视图名
as
查询语句;

*/

USE myemployees;

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

#①创建
CREATE VIEW v_name
AS
SELECT e.last_name,d.department_name,j.job_title
FROM employees e
INNER JOIN departments d 
ON e.department_id=d.department_id
INNER JOIN jobs j ON e.job_id=j.job_id
WHERE e.last_name LIKE '%a%';
#②使用
SELECT * FROM v_name WHERE last_name LIKE '%a%';

#案例:查询各部门门的平均工资级别

#创建视图查看各部门平均工资

CREATE VIEW v_sal
AS
SELECT AVG(salary) ag,department_id
FROM employees
GROUP BY department_id;

#使用

SELECT v_sal.ag,g.grade_level
FROM v_sal
INNER JOIN job_grades g
ON v_sal.ag BETWEEN g.lowest_sal AND g.highest_sal;

#案例:查询平均工资最低的部门信息

CREATE VIEW v_min_sal
AS
SELECT * FROM v_sal ORDER BY ag LIMIT 1;

#案例:查询平均工资最低的部门名和工资

SELECT * FROM departments d
INNER JOIN v_min_sal
ON d.department_id=v_min_sal.department_id;

二、视图的修改

/*
方式一:

create or replace view 视图名
as
查询语句

*/

CREATE OR REPLACE VIEW v_sal
AS
SELECT AVG(salary) ag,job_id
FROM employees
GROUP BY job_id;

SELECT * FROM v_sal;

/*

方式二:

alter view 视图名
as
查询语句

*/

ALTER VIEW v_sal
AS
SELECT AVG(salary) ag,department_id
FROM employees
GROUP BY department_id;

SELECT * FROM v_sal;

三、删除视图

/*
语法

drop view 视图名,视图名,...;

*/

DROP VIEW v_name,v_sal,v_min_sal;

四、查看视图结构

DESC v_name;
SHOW CREATE VIEW v_name;

五、视图的更新

/*
注意:视图一般是用于查询,所以具备以下特点的视图都不允许更新:
1、包含关键字的SQL语句:分组函数、distinct、group by、having、union或者union all
2、常量视图
3、select中包含子查询
4、join
5、from一个不能更新的视图
6、where子句的子查询引用了from子句的表
*/

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

SELECT * FROM v_asal;

SELECT * FROM employees;

1、插入

INSERT INTO v_asal VALUES('测试','test@qq.com');

2、修改

UPDATE v_asal SET last_name='Test' 
WHERE last_name='测试';

3、删除

DELETE FROM v_asal WHERE last_name='Test';

====================================================

分享,多担待。望有帮助

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值