Mysql数据库基础第五章:(二)视图

Mysql数据库基础系列

软件下载地址
提取码:7v7u
数据下载地址
提取码:e6p9
mysql数据库基础第一章:(一)数据库基本概念
mysql数据库基础第一章:(二)mysql环境搭建
mysql数据库基础第二章:(一)基础查询
mysql数据库基础第二章:(二)条件查询
mysql数据库基础第二章:(三)排序查询
mysql数据库基础第二章:(四)常见函数
mysql数据库基础第二章:(五)分组查询
mysql数据库基础第二章:(六)连接查询
mysql数据库基础第二章:(七)子查询
mysql数据库基础第二章:(八)子查询经典案例
mysql数据库基础第二章:(九)分页查询
mysql数据库基础第二章:(十)连接查询
mysql数据库基础第三章:DML语言
mysql数据库基础第四章:DDL(数据定义语言):库表的管理、数据类型与约束条件
mysql数据库基础第五章:(一)事务
mysql数据库基础第五章:(二)视图
mysql数据库基础第六章:变量、存储过程与函数
mysql数据库基础第七章:流程控制结构
mysql数据库基础第八章:窗口函数和公用表达式(CTE)



1.视图

视图是一个虚拟表:和普通表一样使用
可以将查询结果放在视图里作为虚拟的表,不返回结果,只保留逻辑
优势是可以:
1.可以重用sql语句
2.简化sql语句
3.保存数据,提供安全性

在这里插入图片描述

2.视图创建

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

USE myemployees;

#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`;

#3.查询平均工资最低的部门信息

SELECT * FROM myv2 ORDER BY ag LIMIT 1;

#4.查询平均工资最低的部门名和工资

CREATE VIEW myv3
AS
SELECT * FROM myv2 ORDER BY ag LIMIT 1;

SELECT d.*,m.ag
FROM myv3 m
JOIN departments d
ON m.`department_id`=d.`department_id`;

3.视图修改

方式一:create or replace

方式二:alter

SELECT * FROM myv3;

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

;

4.视图的删除与更新

DROP VIEW myv1;

CREATE VIEW myv4
AS 
SELECT last_name, salary
FROM employees;

SELECT * FROM myv4;

INSERT INTO myv4 VALUES('皮卡丘',10000);

UPDATE myv4 SET last_name = '喷火龙' WHERE last_name = '皮卡丘'

DELETE FROM myv4 WHERE last_name = '喷火龙' ;

SELECT * FROM employees;

视图可以更新,主要是进行insert, update, delete。但是一般我们不建议更新视图,因为更新视图的数据也会在原始表中更新。

下列几种不可进行视图更新的情况:

  • 包含以下关键字的sql语句:分组函数、distinct、group by、having、union或者union all
  • select中包含子查询
  • join连接
  • 常量视图
posted @ 2022-08-27 11:09  JOJO数据科学  阅读(53)  评论(0编辑  收藏  举报