视图

  • 一、什么是视图
  • 二、创建视图
    • 1. 视图的修改
    • 2. 删除视图
    • 3. 查看视图
  • 三、视图更新

一、什么是视图

/*
含义:虚拟的表 和普通的表一样使用
通过表动态生成的数据,行和列的数据来自定义视图的查询中使用的表,
并且在使用视图时‘动态生成’,只保存了sql逻辑,不保存查询结果对比    创建语法的关键字    是否实际占用物理空间  使用
视图  create view     是保存了sql逻辑       增删改查,一般只用来查询
表   create table        保存了数据       增删改查
*/
#案例;姓张的学生名和专业名
SELECT `stuname`,`majorName`
FROM `major` m
INNER JOIN `stuinfo` s ON s.`majorId` = m.`id`
WHERE `stuname` LIKE '张%';
#创建视图
CREATE VIEW v1
AS
SELECT `stuname`,`majorName`
FROM `major` m
INNER JOIN `stuinfo` s ON s.`majorId` = m.`id`;SELECT * FROM v1 WHERE `stuname` LIKE '张%';

二、创建视图

/*
语法:
create view 视图名
as
查询语句;*/
USE `myemployees`;
#案例1. 查询姓名中包含a字符的员工名、部门名、工种信息
#①创建视图
CREATE VIEW myv1
AS
SELECT `last_name`,`department_name`,`job_title`
FROM `employees` e
INNER JOIN `departments` d ON e.`department_id` = d.`department_id`
INNER JOIN `jobs` j ON j.`job_id` = e.`job_id`;
#使用视图
SELECT * FROM myv1 WHERE `last_name` LIKE '%a%';#案例2 查询各部门的平均工资级别
#1 创建视图 查看每个部门的平均工资
CREATE VIEW myv2
AS
SELECT  AVG(`salary`) ag,`department_id`
FROM `employees`
GROUP BY `department_id`;
#2 使用
SELECT v.ag,`grade_level`
FROM myv2 v
INNER JOIN `job_grades` j ON v.ag BETWEEN `lowest_sal` AND `highest_sal`; #案例3 查询平均工资最低的部门信息
SELECT * FROM `departments` WHERE `department_id`  = (
SELECT `department_id` FROM myv2 WHERE ag = (SELECT MIN(ag) FROM myv2)
)#案例4 查询平均工资最低的部门名和工资
SELECT `department_name`,ag FROM `departments` d
INNER JOIN myv2 v ON d.`department_id` = v.`department_id`
ORDER BY ag
LIMIT 1;

1. 视图的修改

CREATE VIEW myv3
AS
SELECT * FROM myv2 ORDER BY ag LIMIT 1;
#方式一:
/*
create or replace view 视图名
as
查询语句;*/
CREATE OR REPLACE VIEW myv3
AS
SELECT AVG(`salary`),`job_id` FROM `employees` GROUP BY `job_id`;SELECT * FROM myv3;#方式二:
/*
语法:
alter view 视图名
as
查询语句;
*/
ALTER VIEW myv3
AS
SELECT * FROM myv2 ORDER BY ag LIMIT 1;SELECT * FROM myv3;

2. 删除视图

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

3. 查看视图

DESC myv3;
SHOW CREATE VIEW myv3;

三、视图更新

/*
CREATE OR REPLACE VIEW myv3
AS
SELECT `last_name`,`email`,`salary`*12*(1+ ifnull(`commission_pct`,0)) 年薪
from `employees`;
*/CREATE OR REPLACE VIEW myv3
AS
SELECT `last_name`,`email`
FROM `employees`;SELECT * FROM myv3;
#1.插入
INSERT INTO myv3 VALUES('张飞','zhangqq.com')
SELECT * FROM myv3 WHERE `last_name` LIKE '张飞';
SELECT * FROM `employees` WHERE `last_name` LIKE '张飞';#2.修改
UPDATE myv3 SET `last_name` = '张无忌' WHERE last_name = '张飞';
SELECT * FROM `employees` WHERE `last_name` LIKE '张%';#3.删除
DELETE FROM myv3 WHERE `last_name` LIKE '张%';
SELECT * FROM `employees` WHERE `last_name` LIKE '张%';#具备一下特点的视图是不可以更改的
#①包含:分组函数、distinct,group by,having,unioin,union all的sql语句
CREATE OR REPLACE VIEW myv1
AS
SELECT MAX(`salary`) m,`department_id`
FROM `employees`
GROUP BY `department_id`;
#更新 失败
SELECT * FROM myv1;
UPDATE myv1 SET m=9000 WHERE `department_id` = 10;#②常量视图
CREATE OR REPLACE VIEW myv2
AS
SELECT 'join' NAME;
#更新 错误
SELECT * FROM myv2;
UPDATE myv2 SET NAME='lisi';#③SELECT中包含子查询 不能更新
CREATE OR REPLACE VIEW myv3
AS
SELECT (SELECT MAX(`salary`) FROM `employees` ) 最高工资;
#不能更新
SELECT * FROM myv3;#④join
CREATE OR REPLACE VIEW myv4
AS
SELECT `last_name`,`department_name`
FROM `employees` e
INNER JOIN `departments` d ON d.`department_id` = e.`department_id`;
#更新(不能更新)
SELECT * FROM myv4;
UPDATE myv4 SET last_name = '字符' WHERE last_name = 'fay';#更新成功
SELECT * FROM myv4 WHERE last_name = '字符';
#插入 失败
INSERT INTO myv4 VALUES('zs',Mar);#⑤from一个不能更新的视图
CREATE OR REPLACE VIEW myv5
AS
SELECT * FROM myv3;
#更新 失败
SELECT * FROM myv5;
UPDATE myv5 SET 最高工资=1000;
#⑥where子句的子查询引用了from子句中的表
CREATE OR REPLACE VIEW myv6
AS
SELECT `last_name`,`email`,`salary`
FROM `employees`
WHERE `employee_id` IN (SELECT `manager_id` FROM `employees`WHERE  `manager_id` IS NOT NULL
);
#更新 错误
SELECT * FROM myv6;

3. mysql-视图相关推荐

  1. 【数据库优化专题】MySQL视图优化(一)

    本期数据库优化专题分享,为大家带来的是DBA+社群MySQL领域原创专家--李海翔所著的MySQL视图优化系列文章.以下是第一部分的内容,未完部分敬请关注后续更新. 专家简介 李海翔 网名:那海蓝蓝 ...

  2. mysql视图登录_mysql视图

    mysql视图机制 什么是视图 视图是一张虚拟的表,为什么是虚拟呢?因为视图与数据库中存在的表不太一样,前面我们创建的4张表都是包含数据的, 如用户信息,订单信息等,而视图则是不包含数据的,下面通过一 ...

  3. mysql test 映射到实体_将MySql视图映射到JPA Entitites,使用哪个唯一...

    我不认为有一种标准方式,但这种方法似乎值得尝试. 想法是为视图动态生成唯一的"id"值(类似于rownum).来自Create a view with column num_row ...

  4. 1、MySQL视图是什么?

    MySQL 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中.行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的. 数据库中 ...

  5. mysql 视图操作和存储过程

    1.mysql 视图的操作是在新版本数据库才支持的,视图操作的好处是可以简化数据库的查询,特别是一些经常查询的数据表我们可以先创建一个视图,以后要在查询这个类式 的数据表时候,就可以直接查询该视图.这 ...

  6. MYSQL视图用户管理

    MYSQL视图 文章目录 MYSQL视图 1. 基本使用 2. 视图规则和限制 用户管理 1. 用户 2. 数据库的权限 视图是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列 ...

  7. mysql 视图怎么调用方法_mysql 视图的使用

    mysql视图的作用(详细) 测试表:user有id,name,age,sex字段 测试表:goods有id,name,price字段 测试表:ug有id,userid,goodsid字段 视图的作用 ...

  8. mysql视图实现的_mysql视图是什么?怎么实现?

    mysql视图是什么?怎么实现? 发布时间:2020-05-21 18:00:24 来源:亿速云 阅读:152 作者:鸽子 视图本身是一张虚拟表,不存放任何数据.在使用SQL语句访问视图的时候,获取的 ...

  9. mysql 视图 数据相加_MySQL

    查看安装路径 ps -ef|grep mysql 1,配置linux虚拟机,修改IP ????? vim /etc/sysconfig/network-scripts/ifcfg-eth0 2,配置完 ...

  10. mysql 视图 教程_MySQL视图简介及基本操作教程

    前言 视图是数据库系统中一种非常有用的数据库对象.MySQL 5.0 之后的版本添加了对视图的支持. 认识视图 视图是一个虚拟表,其内容由查询定义.同真实表一样,视图包含一系列带有名称的列和行数据,但 ...

最新文章

  1. SAP MM 价格重估产生的差异
  2. 远去的高考,消逝的大一……
  3. TCP/IP协议模型详解
  4. 成功解决label_error >= 0 label_error < static_cast<int>(nclass) MultiClassEvaluation: label must be i
  5. Linux文件和目录属性
  6. 脑洞大开!拿Transformer和CNN比较!犯错都像人类
  7. 什么是E-MapReduce
  8. python 公开课_【python公开课|学好python前,必须掌握这篇Python for 循环语句,还不会就快来看看】- 环球网校...
  9. 批量更改文件名的批处理文件
  10. IDEA 不识别的MAVEN 项目应如何处理
  11. android 单独编译contacts,Android编译全过程
  12. python爬虫qq付费音乐_Python 应用爬虫下载QQ音乐
  13. 量子通信技术、量子加密技术
  14. protoc 编译工具
  15. 像中文的罗马音字体复制_罗马音字体大全可复制中文
  16. 第一阶段:JAVA快速入门
  17. 梳理一些近期关于编程和其他一些感想
  18. USB 设置接口SetInterface
  19. Google Play 签名不一致的解决方案
  20. 贪心算法经典例题分析

热门文章

  1. php格林威治时间,时间戳与格林威治时间互相转换
  2. 红米充电短路 红米note3充电短路 无法充电
  3. marked + mathjax 实现支持数学公式的 markdown 转 html
  4. 学习平面设计的去哪学,平面设计一般学多久:夏雨老师
  5. 六位创业者分享内心最恐惧的事情
  6. 你真的理解二分的写法吗 - 二分写法详解
  7. 【CVPR 2021】 Lifelong Person Re-Identification via Adaptive Knowledge Accumulation
  8. 天盾linux数据恢复,天盾Linux数据恢复软件
  9. python京东注册机_京东自动注册
  10. git stash '储藏'当前工作状态