MySQL的视图

一、MySQL视图的介绍和作用

MySQL视图,加油兄弟们,孰能生巧,完整代码在最后!!!

视图是一个虚拟的表,并不是真是存在的,视图其实并没有真实的数据,他只是根据一个sql语句获取的一个数据集,并为其命名,视图只是代表查出来的数据,如果想要找数据,还是需要从原来的数据里面去找。

原表的数据发生变化,视图的数据也会发生变化

可以简化代码,把重复使用的查询封装成视图重复使用,像子查询里面的需要在写一次查询语句,使用视图,代码更简单一点

可以使用视图,让不一样的人看到的数据不一样

二、创建视图

数据添加

因为视图是根据原来的表产生的,所以原来的表发生变化,视图也会发生变化

比如原来表把名字改为ikun,视图也会变化

三、修改视图

四、更新视图

更新视图其实事实上还是更新的视图所对应的原表的数据,并不是所有情况下都可以使用,会有一些限制,好多情况下都不可以更新

将视图中的甘宁修改为周瑜,原表的甘宁也变成了周瑜

直接插入两个数据就不可以,因为原表一行不止两个数据

比如:视图包含聚合函数不可更新

视图包含distinct不可更新

总的来是:视图包含以下不可更新:聚合函数,distinct,group by,having,union,union all,子查询,join,常量文字值

视图虽然可以更新,但是大部分不可以,一般来说不要想通过视图去修改表,可能会导致数据更新失败

五、删除视图和重命名视图

记住删除视图,并不会删除表的数据,他只是删除了视图的定义

六、练习

看起来很复杂,但是其实只是简单的四层嵌套,第一层分组算平均数,第二层排序号,第三层找出序号为1的,第四层找出部门名称

创建视图,可以使代码更加简洁

七、总结

八、完整代码

-- 创建视图 
 
 create database mydb6_view;
 
USE mydb6_view;
CREATE TABLE dept(
    deptno INT PRIMARY KEY,
  dname VARCHAR(20),
    loc VARCHAR(20)
);
INSERT INTO dept VALUES(10, '教研部','北京'),
(20, '学工部','上海'),
(30, '销售部','广州'),
(40, '财务部','武汉');

CREATE TABLE emp(
    empno INT PRIMARY KEY,
    ename VARCHAR(20),
    job VARCHAR(20),
    mgr INT,
    hiredate DATE,
    sal NUMERIC(8,2),
    comm NUMERIC(8, 2),
    deptno INT,
--     FOREIGN KEY (mgr) REFERENCES emp(empno),
    FOREIGN KEY (deptno) REFERENCES dept(deptno) ON DELETE SET NULL ON UPDATE CASCADE
);
 
 INSERT INTO emp VALUES
(1001, '甘宁', '文员', 1013, '2000-12-17', 8000.00, NULL, 20),
(1002, '黛绮丝', '销售员', 1006, '2001-02-20', 16000.00, 3000.00, 30),
(1003, '殷天正', '销售员', 1006, '2001-02-22', 12500.00, 5000.00, 30),
(1004, '刘备', '经理', 1009, '2001-4-02', 29750.00, NULL, 20),
(1005, '谢逊', '销售员', 1006, '2001-9-28', 12500.00, 14000.00, 30),
(1006, '关羽', '经理', 1009, '2001-05-01', 28500.00, NULL, 30),
(1007, '张飞', '经理', 1009, '2001-09-01', 24500.00, NULL, 10),
(1008, '诸葛亮', '分析师', 1004, '2007-04-19', 30000.00, NULL, 20),
(1009, '曾阿牛', '董事长', NULL, '2001-11-17', 50000.00, NULL, 10),
(1010, '韦一笑', '销售员', 1006, '2001-09-08', 15000.00, 0.00, 30),
(1011, '周泰', '文员', 1008, '2007-05-23', 11000.00, NULL, 20),
(1012, '程普', '文员', 1006, '2001-12-03', 9500.00, NULL, 30),
(1013, '庞统', '分析师', 1004, '2001-12-03', 30000.00, NULL, 20),
(1014, '黄盖', '文员', 1007, '2002-01-23', 13000.00, NULL, 10);
 
 use mydb6_view;
create or replace 
  view view1_emp
  as 
  select ename,job from emp;
 
-- 查看表和视图
show tables;
-- 虽然是一个视图,但是也是会当作一个表来查看
 
 
-- 查看表和视图的类型
show full tables;
 
select * from view1_emp;
 

-- 修改视图
alter view view1_emp
as 
select a.deptno,a.dname,a.loc,b.ename,b.sal from dept a,emp b where a.deptno = b.deptno;
 
select * from view1_emp; 
 
-- 更新视图
create or replace view view1_emp
as 
select ename,job from emp;
 
select * from view1_emp;
 
update view1_emp set ename = '周瑜' where ename = '甘宁';

insert into view1_emp values('孙权','文员');

-- 视图包含聚合函数不可更新
create or replace view ciew2_emp
AS
select count(*) cnt from emp; 
select * from ciew2_emp;
insert into ciew2_emp values(100); 
update ciew2_emp set cnt = 100;
 
 -- 视图包含distinct不可更新
 create or replace view view2_emp
 AS
 select job from emp;
 select * from view2_emp;
 insert into view2_emp values('小鸡');
 
 
 create or replace view view3_emp
 AS
 select deptno,count(*) cnt from emp group by deptno having cnt > 2;
 select * from view3_emp;
 insert into view3_emp values(30,100);
 
 -- union 就是把两个表拼一起
 create or replace view view4_emp
 AS
 select empno,ename from emp where empno <= 1005
 union 
 select empno,ename from emp where empno > 1005;
 select * from view4_emp;
 insert into view4_emp values(1003,'小');
 
 
 -- 重命名视图
 rename table view1_emp to myview1;
 
 
 -- 删除视图
 drop view if exists myview1;
 
 
 -- 查询部门平均薪水最高的部门名称
  SELECT
    a.deptno,
    a.dname,
    a.loc,
    avg_sal
  FROM
    dept a,
    (
      SELECT
        *
      FROM
        (
          SELECT
            *,
            rank() over (ORDER BY avg_sal DESC) rn
          FROM
            (SELECT deptno, avg(sal) avg_sal FROM emp GROUP BY deptno) t
        ) tt
      WHERE
        rn = 1
    ) ttt
  WHERE
    a.deptno = ttt.deptno;
 -- ---------------------------- 视图---------
 create view test_view1
 as 
 select deptno,avg(sal) avg_sal from emp group by deptno;
 
 create view test_view2 
 AS
 select *,rank() over(order by avg_sal desc) rn from test_view1;
 
 create view test_view3
 as 
 select * from test_view2 tt where rn = 1;
 
 select * from test_view3;
 -- 使用视图简化后
 select a.deptno,a.dname,a.loc,avg_sal
 from dept a,test_view3 ttt 
 where a.deptno = ttt.deptno;
 
 create view view1
 as 
   SELECT
    a.deptno,
    a.dname,
    a.loc,
    avg_sal
  FROM
    dept a,
    (
      SELECT
        *
      FROM
        (
          SELECT
            *,
            rank() over (ORDER BY avg_sal DESC) rn
          FROM
            (SELECT deptno, avg(sal) avg_sal FROM emp GROUP BY deptno) t
        ) tt
      WHERE
        rn = 1
    ) ttt
  WHERE
    a.deptno = ttt.deptno;
    
select * from view1;


 -- 查询员工比所属领导薪资高的部门名、员工名、员工领导编号
 create view test_view4
 AS
 select a.ename ename,a.sal esal,b.ename mgrname,b.sal msal,a.deptno from emp a,emp b where a.mgr = b.empno and a.sal > b.sal;
 select * from test_view4;
 select * from dept a join test_view4 b on a.deptno = b.deptno;
 
 
 --  查询工资等级为4级,2000年以后入职的工作地点为上海的员工编号、姓名和工资,并查询出薪资在前三名的员工信息
 create view test_view5
 as 
 select a.deptno,a.dname,a.loc,b.empno,b.ename,b.sal from dept a join emp b on a.deptno = b.deptno and b.sal between '20010' and '30000' and year(hiredate) > '2000' and a.loc = '上海';
  select * from test_view5;
  
 select * from 
 (
 select *,rank() over(order by sal desc) rn 
 from test_view5
 )t 
 where rn <= 3;
 
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/80207.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scala与Go的异同教程

当瑞士军刀遇到电锯&#xff1a;Scala vs Go的相爱相杀之旅 各位准备秃头的程序猿们&#xff08;放心&#xff0c;用Go和Scala不会加重你的发际线问题&#xff09;&#xff0c;今天我们来聊聊编程界的"冰与火之歌"——Scala和Go的异同。准备好瓜子饮料&#xff0c;我…

SaaS场快订平台项目说明【持续更新】

一、项目介绍 SaaS场快订平台是一个高效、便捷的体育场馆在线预订平台。本项目采用SaaS方式开发&#xff0c;用户不需要安装软件&#xff0c;直接通过互联网访问在线程序即可使用。本项目主要构建了一个体育馆预订系统&#xff0c;项目的功能主要包括&#xff1a;用户注册与登…

linux中常用的命令(三)

目录 1- ls(查看当前目录下的内容) 2- pwd (查看当前所在的文件夹) 3- cd [目录名]&#xff08;切换文件夹&#xff09; 4- touch [文件名] &#xff08;如果文件不存在&#xff0c;新建文件&#xff09; 5- mkdir[目录名] &#xff08;创建目录&#xff09; 6-rm[文件名]&…

使用Simulink开发Autosar Nvm存储逻辑

文章目录 前言Autosar Nvm接口设计模型及接口生成代码及arxmlRTE接口mappingRTE代码分析总结 前言 之前介绍过Simulink开发Dem故障触发逻辑&#xff0c;本文接着介绍另外一个常用的功能-Nvm存储的实现。 Autosar Nvm接口 Autosar Nvm中一般在上电初始化的时调用Nvm_ReadAll获…

Java—— 泛型详解

泛型概述 泛型是JDK5中引入的特性&#xff0c;可以在编译阶段约束操作的数据类型&#xff0c;并进行检查。 泛型的格式&#xff1a;<数据类型> 注意&#xff1a;泛型只能支持引用数据类型。 泛型的好处 没有泛型的时候&#xff0c;可以往集合中添加任意类型的数据&#x…

通俗的桥接模式

桥接模式&#xff08;Bridge Pattern&#xff09; 就像一座桥&#xff0c;把两个原本独立变化的东西连接起来&#xff0c;让它们可以各自自由变化&#xff0c;互不干扰。简单来说&#xff0c;就是 “把抽象和实现分开&#xff0c;用组合代替继承”。 一句话理解桥接模式 假设你…

【现代深度学习技术】注意力机制04:Bahdanau注意力

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…

爬虫学习————开始

&#x1f33f;自动化的思想 任何领域的发展原因————“不断追求生产方式的改革&#xff0c;即使得付出与耗费精力越来愈少&#xff0c;而收获最大化”。由此&#xff0c;创造出方法和设备来提升效率。 如新闻的5W原则直接让思考过程规范化、流程化。或者前端框架/后端轮子的…

每天五分钟机器学习:KTT条件

本文重点 在前面的课程中,我们学习了拉格朗日乘数法求解等式约束下函数极值,如果约束不是等式而是不等式呢?此时就需要KTT条件出手了,KTT条件是拉格朗日乘数法的推广。KTT条件不仅统一了等式约束与不等式约束的优化问题求解范式,KTT条件给出了这类问题取得极值的一阶必要…

leetcode0829. 连续整数求和-hard

1 题目&#xff1a; 连续整数求和 官方标定难度&#xff1a;难 给定一个正整数 n&#xff0c;返回 连续正整数满足所有数字之和为 n 的组数 。 示例 1: 输入: n 5 输出: 2 解释: 5 2 3&#xff0c;共有两组连续整数([5],[2,3])求和后为 5。 示例 2: 输入: n 9 输出: …

window 显示驱动开发-线性伸缩空间段

线性伸缩空间段类似于线性内存空间段。 但是&#xff0c;伸缩空间段只是地址空间&#xff0c;不能容纳位。 若要保存位&#xff0c;必须分配系统内存页&#xff0c;并且必须重定向地址空间范围以引用这些页面。 内核模式显示微型端口驱动程序&#xff08;KMD&#xff09;必须实…

Cadence 高速系统设计流程及工具使用三

5.8 约束规则的应用 5.8.1 层次化约束关系 在应用约束规则之前&#xff0c;我们首先要了解这些约束规则是如何作用在 Cadence 设计对象上的。Cadence 中对设计对象的划分和概念&#xff0c;如表 5-11 所示。 在 Cadence 系统中&#xff0c;把设计对象按层次进行了划分&#…

ScaleTransition 是 Flutter 中的一个动画组件,用于实现缩放动画效果。

ScaleTransition 是 Flutter 中的一个动画组件&#xff0c;用于实现缩放动画效果。它允许你对子组件进行动态的缩放变换&#xff0c;从而实现平滑的动画效果。ScaleTransition 通常与 AnimationController 和 Tween 一起使用&#xff0c;以控制动画的开始、结束和过渡效果。 基…

深入解析:如何基于开源p-net快速开发Profinet从站服务

一、Profinet协议与软协议栈技术解析 1.1 工业通信的"高速公路" Profinet作为工业以太网协议三巨头之一,采用IEEE 802.3标准实现实时通信,具有: 实时分级:支持RT(实时)和IRT(等时实时)通信模式拓扑灵活:支持星型、树型、环型等多种网络结构对象模型:基于…

m个n维向量组中m,n的含义与空间的关系

向量的维度与空间的关系&#xff1a; 一个向量的维度由其分量个数决定&#xff0c;例如 ( n ) 个分量的向量属于 Rn空间 。 向量组张成空间的维度&#xff1a; 当向量组有 ( m ) 个线性无关的 ( n ) 维向量时&#xff1a; 若 ( m < n )&#xff1a; 这些向量张成的是 Rn中的…

excel大表导入数据库

前文介绍了数据量较小的excel表导入数据库的方法&#xff0c;在数据量较大的情况下就不太适合了&#xff0c;一个是因为mysql命令的执行串长度有限制&#xff0c;二是node-xlsx这个模块加载excel文件是整个文件全部加载到内存&#xff0c;在excel文件较大和可用内存受限的场景就…

Python 爬虫基础入门教程(超详细)

一、什么是爬虫&#xff1f; 网络爬虫&#xff08;Web Crawler&#xff09;&#xff0c;又称网页蜘蛛&#xff0c;是一种自动抓取互联网信息的程序。爬虫会模拟人的浏览行为&#xff0c;向网站发送请求&#xff0c;然后获取网页内容并提取有用的数据。 二、Python爬虫的基本原…

Spring Security 深度解析:打造坚不可摧的用户认证与授权系统

Spring Security 深度解析&#xff1a;打造坚不可摧的用户认证与授权系统 一、引言 在当今数字化时代&#xff0c;构建安全可靠的用户认证与授权系统是软件开发中的关键任务。Spring Security 作为一款功能强大的 Java 安全框架&#xff0c;为开发者提供了全面的解决方案。本…

【物联网】基于树莓派的物联网开发【1】——初识树莓派

使用背景 物联网开发从0到1研究&#xff0c;以树莓派为基础 场景介绍 系统学习Linux、Python、WEB全栈、各种传感器和硬件 接下来程序猫将带领大家进军物联网世界&#xff0c;从0开始入门研究树莓派。 认识树莓派 正面图示&#xff1a; 1&#xff1a;树莓派简介 树莓派…

第21节:深度学习基础-激活函数比较(ReLU, Sigmoid, Tanh)

1. 引言 在深度学习领域,激活函数是神经网络中至关重要的组成部分 它决定了神经元是否应该被激活以及如何将输入信号转换为输出信号 激活函数为神经网络引入了非线性因素,使其能够学习并执行复杂的任务 没有激活函数,无论神经网络有多少层,都只能表示线性变换,极大地限…