当前位置: 首页 > news >正文

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;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 安卓将本地日志上传到服务器
  • 高效容器化技术(1)---容器化技术简介
  • 如何快速学习拼音打字?
  • Java程序流程控制
  • 基于Linux和C++实现的RabbitMQ风格消息队列:设计与实现
  • 第二届Apache Flink极客挑战赛冠军比赛攻略_SkyPeaceLL队
  • VirtualBox 7.1.0 发布下载 - 开源跨平台虚拟化软件
  • 大数据和代理:揭示它们之间的微妙联系
  • STM32 + W5500 实现HTTPS !
  • 从Profinet到Ethernet IP网关技术重塑工业网络,数据传输更流畅
  • Vue3 父组件向子组件传值:异步数据处理的显示问题
  • MiniDB 使用手册
  • LIN总线CAPL函数——校验和段(Checksum)测试(linGetChecksum)
  • QT事件用法详解
  • 【网络安全 | 代码审计】JFinal之DenyAccessJsp绕过
  • [译]前端离线指南(上)
  • 2018一半小结一波
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Android框架之Volley
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • css属性的继承、初识值、计算值、当前值、应用值
  • Github访问慢解决办法
  • Java基本数据类型之Number
  • MYSQL 的 IF 函数
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Terraform入门 - 1. 安装Terraform
  • windows-nginx-https-本地配置
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 开源SQL-on-Hadoop系统一览
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 你真的知道 == 和 equals 的区别吗?
  • 前端路由实现-history
  • 深入浏览器事件循环的本质
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 新手搭建网站的主要流程
  • 异步
  • 硬币翻转问题,区间操作
  • 原生js练习题---第五课
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (回溯) LeetCode 46. 全排列
  • (六)软件测试分工
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (十) 初识 Docker file
  • .NET Framework 4.6.2改进了WPF和安全性
  • .net mvc 获取url中controller和action
  • .NET Project Open Day(2011.11.13)
  • .NET 常见的偏门问题
  • .net对接阿里云CSB服务
  • .net中生成excel后调整宽度