MySQL学习(视图总结)

文章目录

  • MySQL的视图
  • 视图基本操作
    • 创建视图
    • 修改视图
  • 练习

MySQL的视图

  • 视图是虚拟的表,是从数据库中一个或多个表中导出来的表,作用是可以隐藏一些数据,也可以将一些复杂的查询结果做成视图。
  • 数据库只保存视图的定义,而不保存视图中的数据,数据存放在原表也依赖于原表,当原表发生变化时,视图中的数据也会发生变化。
  • 好处
    – 视图可以简化用户的数据查询操作,可以把重复使用的查询更加方便使用,也可以使复杂的查询易于理解和使用。
    – 视图可以保护数据的安全,可以对不同的用户定义不同的查询结果。

视图基本操作

创建视图

将一条select语句封装成一个虚拟表

/*create [or replace] [algorithm={undefined|merge|temptable}]view 视图名称 [(column_list)]as select语句[with [cascasded | local] check option]algrithm: 视图算法,默认是undefined,可选merge或temptablecolumn_list: 指定视图中各个属性的名词,默认与select中的查询属性相同[with [cascasded | local] check option]:指定视图是否允许更新,默认是cascasded
*/
create or replace view v_emp
as
select a.deptno, a.ename, a.sal from emp a;
  • 查看表与视图
show full tables;

修改视图

  • 更换构造视图的select查询语句
alter view v_emp
as
select a.deptno, a.ename, b.dname from emp a, dept b where a.deptno = b.deptno;
  • 更新视图(针对更换查询语句前)
update v_emp set ename = 'jack' where ename = 'scott';
insert into v_emp values(10, 'jack', 5000);
  • 下面情况不可更新
  1. 视图包含聚合函数
        create or replace view v_emp_b1asselect count(*) cnt from emp;select * from v_emp_b1;update v_emp_b1 set cnt = 20;   -- 报错insert into v_emp_b1 values(20); -- 报错
  1. 视图包含distinct
        create or replace view v_emp_b2asselect distinct job from emp;select * from v_emp_b2;update v_emp_b2 set job = 'fff' where job = 'analyst'; -- 报错insert into v_emp_b2 values('fff'); -- 报错
  1. 视图包含分组函数(group by)或having
        create or replace view v_emp_b3asselect a.deptno, count(*) cnt from emp a group by a.deptno having count(*) > 2;select * from v_emp_b3;update v_emp_b3 set cnt = 20 where cnt = 5; -- 报错insert into v_emp_b3 values(10, 20); -- 报错
  1. 视图包含union或union all
        create or replace view v_emp_b4asselect a.deptno, a.ename from emp a where a.deptno = 10unionselect a.deptno, a.ename from emp a where a.deptno <= 20;select * from v_emp_b4;update v_emp_b4 set ename = 'jack' where ename = 'scott'; -- 报错insert into v_emp_b4 values(10, 'jack'); -- 报错
  1. 视图包含子查询
        create or replace view v_emp_b5asselect a.deptno, a.ename from emp a where a.sal > (select avg(a.sal) from emp a);select * from v_emp_b5;update v_emp_b5 set ename = 'ham' where ename = 'king'; -- 报错insert into v_emp_b5 values(10, 'ham'); -- 报错
  1. 视图包含join
        create or replace view v_emp_b6asselect a.deptno, b.dname from emp a join dept b on a.deptno = b.deptno;select * from v_emp_b6;update v_emp_b6 set dname = 'sales' where dname = 'accounting'; -- 报错insert into v_emp_b6 values(10, 'sales'); -- 报错
  1. select仅引用文字值
        create or replace view v_emp_b7asselect 'aaa' dname, '小星星' ename;select * from v_emp_b7;update v_emp_b7 set dname = 'bbb' where ename = '小星星'; -- 报错insert into v_emp_b7 values('bbb', '小星星'); -- 报错
  • 视图其他操作
  1. 重命名视图
rename table v_emp to new_v_emp;
  1. 删除视图
drop view if exists new_v_emp;

练习

  • 找出平均工资最高的部门
    – 多重子查询
        selecta.dname, a.deptnofromdept a join(select* from(select*,rank() over(order by t.avg_sal DESC) rnfrom(select a.deptno, avg(a.sal) avg_sal from emp a group by a.deptno) t) tt where tt.rn = 1) ttt where a.deptno = ttt.deptno;

– 视图

        create or replace view view_avg_sal1asselect a.deptno, avg(a.sal) avg_sal from emp a group by a.deptno;select * from view_avg_sal1;create or replace view view_avg_sal2asselect *, rank() over(order by t.avg_sal DESC) rn from view_avg_sal1 t;select * from view_avg_sal2;create or replace view view_avg_sal3asselect * from view_avg_sal2 where rn = 1;select * from view_avg_sal3;select a.dname, a.deptno from dept a join view_avg_sal3 b on a.deptno = b.deptno;
  • 找出工资比领导高的员工
        create or replace view v_emp_b8asselect a.deptno _deptno, b.ename _yg_name, a.empno _ld_id from emp a, emp b where a.empno = b.mgr and a.sal < b.sal;select * from v_emp_b8;select a.dname, b._yg_name, b._ld_id from dept a join v_emp_b8 b on a.deptno = b._deptno;
  • 找出工资在4级,且入职时间早于1985年的且工资最高的且工作地点是dallas的员工
        -- 工资在4级的员工信息create or replace view v_emp_b9asselect * from emp a, salgrade b where a.sal between b.losal and b.hisal and b.grade = 4;select * from v_emp_b9;-- 入职时间早于1985年的员工信息create or replace view v_emp_b10asselect * from v_emp_b9 a where year(a.hiredate) < 1985;select * from v_emp_b10;-- 工作地点是dallas并按工资降序create or replace view v_emp_b11asselect a.empno, a.ename, a.sal from v_emp_b10 a, dept b where a.deptno = b.deptno and b.loc = 'dallas' order by a.sal desc;select * from v_emp_b11;-- 窗函数得到工资序号create or replace view v_emp_b12asselect *, rank() over (order by a.sal desc) rn from v_emp_b11 a;select * from v_emp_b12 where rn = 1;

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

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

相关文章

运维最难的是哪些部分呢

在讨论运维工作中&#xff0c;监控通常被视为一个核心且至关重要的环节&#xff0c;但它是否可以被简单地定义为“最难”的工作&#xff0c;则取决于多种因素&#xff0c;包括但不限于技术复杂度、资源投入、团队结构、业务特性以及故障应对的及时性等。以下是对运维中监控工作…

基因组注释工具MAKER的报错与解决方法

基因组注释工具MAKER的报错与解决措施 ● 报错1 ● 报错内容&#xff1a;ERROR: Could not determine if DFam is installed ● 解决措施&#xff1a; ● export LIBDIR/your_path/envs/maker/share/RepeatMasker/Matrices ● export LIBDIR/your_path/envs/maker/share/R…

Linux常见查看文件命令

目录 一、cat 1.1. 查看文件内容 1.2. 创建文件 1.3. 追加内容到文件 1.4. 连接文件 1.5. 显示多个文件的内容 1.6. 使用管道 1.7. 查看文件的最后几行 1.8. 使用 -n 选项显示行号 1.9. 使用 -b 选项仅显示非空行的行号 二、tac 三、less 四、more 五、head 六、…

解决Gson将长数字( json字符串)转换为科学记数法格式

Gson&#xff08;又称Google Gson&#xff09;是Google公司发布的一个开放源代码的Java库&#xff0c;主要用途为序列化Java对象为JSON字符串&#xff0c;或反序列化JSON字符串成Java对象。 依赖 Gradle: dependencies {implementation com.google.code.gson:gson:2.11.0 }…

sql中行转列 列转行

场景 在平常使用中&#xff0c;我们经常会遇到行专列&#xff0c;列转行进行查询的操作 或者 一行转多列的情况 我们接下来讨论如何通过一条语句实现&#xff0c;动态sql创建的方式暂时除外&#xff0c;当然你可以可以使用动态sql创建为存储过程&#xff0c;我会介绍几种常用…

nginx基础篇(一)

文章目录 学习链接概图一、Nginx简介1.1 背景介绍名词解释 1.2 常见服务器对比IISTomcatApacheLighttpd其他的服务器 1.3 Nginx的优点(1)速度更快、并发更高(2)配置简单&#xff0c;扩展性强(3)高可靠性(4)热部署(5)成本低、BSD许可证 1.4 Nginx的功能特性及常用功能基本HTTP服…

内存压力测试工具的开发与实现

内存压力测试工具的开发与实现 一、工具设计概述二、工具实现1. 伪代码设计2. C代码实现三、工具使用与扩展四、结论在软件开发过程中,内存稳定性与可靠性是确保系统长期稳定运行的关键因素。为了验证系统在高负载下的内存表现,内存压力测试工具显得尤为重要。本文将基于C语言…

上市公司-客户ESG数据集(dta+xlsx+参考文献)(2009-2023年)

参考《经济问题》中李普玲&#xff08;2024&#xff09;的做法&#xff0c;将供应商与主要客户数据对应起来&#xff0c;并对上市公司及关联上市公司的ESG数据进行匹配&#xff0c;形成“供应商——客户ESG”的数据集&#xff0c;保留客户的销售占比 一、数据介绍 数据名称&am…

pdf文件怎么转换成ppt?介绍几种pdf转ppt的方法

pdf文件怎么转换成ppt&#xff1f;将pdf文件转换成ppt格式是一种常见且实用的需求&#xff0c;特别是在制作演示文稿和准备报告时。pdf格式因其文件内容的固定排版和高兼容性而广泛应用于文档的保存和分享。然而&#xff0c;在某些情况下&#xff0c;将pdf文件转换为ppt格式可以…

开源 AI 智能名片 S2B2C 商城小程序中的全渠道供应策略

摘要&#xff1a;本文深入探讨在开源 AI 智能名片 S2B2C 商城小程序的情境下&#xff0c;全渠道供应的运行机制。阐述各环节企业相互配合的重要性&#xff0c;重点分析零售企业在其中的关键作用&#xff0c;包括协调工作、信息传递、需求把握等方面&#xff0c;旨在实现高效的全…

鸿蒙开发之ArkUI 界面篇 十二 背景属性

backgroundColor背景色(纯颜色&#xff0c;没法实现立体感之类高级效果)、 backgroundImage背景图(一般是设计师设计好的图)、 backgroundImageSize背景图尺寸(用于调整背景图的尺寸)、 backgroundImagePosition背景图位置(用于调整背景图的位置)。 背景图的添加是属性backgrou…

测试工程师学历路径:从功能测试到测试开发

现在软件从业者越来越多&#xff0c;测试工程师的职位也几近饱和&#xff0c;想要获得竞争力还是要保持持续学习。基本学习路径可以从功能测试-自动化测试-测试开发工程师的路子来走。 功能测试工程师&#xff1a; 1、软件测试基本概念&#xff1a; 学习软件测试的定义、目的…

使用ShardingSphere实现MySql的分库分表

目录 一 什么是ShardingSphere分库分表 二 代码实现 1.导入相关依赖 2.配置相关参数 3.创建学生类以及mapper接口 4.实现 StandardShardingAlgorithm接口自定义分片算法 唐洋洋我知道你在看!!!嘿嘿 一 什么是ShardingSphere分库分表 我们平时在设计数据库的时候&#xf…

14 款全新「史诗级」可穿戴装备即将面世,附上获取教程!

14 个新的可穿戴装备原理图火热出炉&#xff0c;随时可供锻造 &#x1f525; 2024 年 7 月&#xff0c;AavegotchiDAO 举办了一次社区设计竞赛&#xff0c;才华横溢的艺术家们施展了他们的设计技能&#xff0c;创造出了 14 个新的可穿戴装备原理图。 现在&#xff0c;这些独一…

Android Tools | 如何使用Draw.io助力Android开发:从UI设计到流程优化

Android Tools | 如何使用Draw.io助力Android开发&#xff1a;从UI设计到流程优化 1. 引言 在Android开发中&#xff0c;视觉化设计与流程管理至关重要。虽然开发工具如Android Studio强大&#xff0c;但它并不适用于所有设计场景。Draw.io是一款免费的在线绘图工具&#xff…

网络运维面试题

1. 请解释OSI模型和TCP/IP模型的主要区别。 OSI模型和TCP/IP模型是两种不同的网络通信参考模型&#xff0c;它们在层数、功能及服务等方面存在显著差异。以下是具体区别&#xff1a; 层数 OSI模型&#xff1a;OSI模型共有七层&#xff0c;分别是物理层、数据链路层、网络层、…

先楫HPM6750 Windows下VSCode开发环境配置

用的是EVKmini&#xff0c;ft2232作为调试器jtag接口调试 启动start_gui.exe 以hello_world为例&#xff0c;更改一下build path&#xff0c;可以generate并使用gcc compile 最后会得到这些 点击start_gui里面的命令行&#xff0c;用命令行启动vscode 新建.vscode文件夹&…

Mysql树形结构表-查询所有子集数据

表结构&#xff0c;这里只是个例子&#xff0c;所有的树形结构表均可用&#xff1a; CREATE TABLE zhkt_course_chapter (id bigint NOT NULL COMMENT 唯一id,course_id bigint NOT NULL COMMENT 所属课程id,name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general…

【C++入门学习】7. 类型

基本类型 修饰符类型 基本类型 类型关键字布尔型bool字符型char整型int浮点型float双浮点型double无类型void宽字符型wchar_t 字符型char只占八位&#xff0c;存储ascii码的&#xff0c;而宽字符型是为了存储多国语言的代码unicode。 // 宽字符型的定义 typedef short int …

【计算机网络】数据链路层深度解析

概述三个重要问题封装成帧差错检测可靠传输 使用广播信道的数据链路层数据链路层的互连设备 媒体接入MAC地址集线器与交换机区别以太网交换机生成树协议STP 概述 链路就是从一个结点到相邻结点的一段物理线路&#xff0c;而中间没有任何其他的交换结点。数据链路是指把实现通信…