SQL中灵活的视图

news2024/10/6 10:27:48

文章目录

  • 视图的创建、嵌套及特性
      • 创建视图
      • 查询视图
      • 视图的嵌套
  • 常见的8个使用场景
      • 场景一:仅提供需要的数据
      • 场景二:对特定的用户仅开放特定的数据,达到保护敏感数据的目的,提升了数据安全性;
      • 仅筛选需要的数据
      • 场景四:简化复杂的操作
      • 场景五:重新格式化出新的字段
      • 场景六:使用计算表达式生成新的字段
      • 场景七:屏蔽底层实现逻辑及频繁的变更
      • 场景八:合并多个分离的子表

视图的创建、嵌套及特性

比如:查询学生信息时,同时查询出老师姓名:
SELECT
a.*, b.teacher_name
FROM student a
LEFT JOIN teacher b
ON a.teacher_id = b.teacher_id;
思考:如果有很多地方都需要按上面的逻辑查询,那LEFT JOIN的脚本就需要写
很多遍,有没有一种简写的方式?

我们可以使用视图实现:
请添加图片描述

使用建议:慎用视图!
复杂的关联、嵌套,导致执行计划不可控,查询性能低下;

创建视图

使用CREATE VIEW关键字。语法如下:

CREATE VIEW 视图名
AS
SELECT子句;

比如,查询学生信息时,同时查询出老师姓名:

CREATE VIEW v_student
AS
SELECT 
a.*, b.teacher_name
FROM student a
LEFT JOIN teacher b
ON a.teacher_id = b.teacher_id;

查询视图

与查询表一样,使用SELECT子句。

比如,查询学生信息时,同时查询出老师姓名:

SELECT * FROM v_student;
SELECT student_id,student_name,teacher_id,teacher_name from v_student;
SELECT * FROM v_student WHERE teacher_id = 'T0003';

视图的嵌套

查询所有考试及格的学生信息:

CREATE VIEW v_student_nesting
AS
SELECT * FROM v_student
WHERE score >= 60;

常见的8个使用场景

场景一:仅提供需要的数据

比如:只想查询学生编号、学生姓名、分数三个字段的信息:

CREATE VIEW v_student1
AS
SELECT 
a.student_id,a.student_name,a.score
FROM student a;

场景二:对特定的用户仅开放特定的数据,达到保护敏感数据的目的,提升了数据安全性;

比如:只想将学生编号、学生姓名、分数三个字段的信息暴露给用户u_read:

GRANT SELECT ON v_student1 TO u_read@localhost;

仅筛选需要的数据

比如:只查询成绩及格的学生信息:

CREATE VIEW v_student3
AS
SELECT * FROM student a
WHERE a.score >= 60;

场景四:简化复杂的操作

比如:在应用的多个地方,都需要查询学生信息时,同时查询出老师姓名:

CREATE VIEW v_student4
AS
SELECT a.*,b.teacher_name
FROM student a
LEFT JOIN teacher b
ON a.teacher_id = b.teacher_id;

SELECT * FROM v_student4;

场景五:重新格式化出新的字段

比如:查询学生出生日期,年月日单独一个字段展示:

CREATE VIEW v_student5
AS
SELECT a.student_id, a.student_name,
year(a.birth_day) birth_year,
month(a.birth_day) birth_month,
day(a.birth_day) birth_day
FROM student a;

场景六:使用计算表达式生成新的字段

比如:考试总分100分,查询所有学生做错的题目的分数:

CREATE VIEW v_student6
AS
SELECT 
a.student_id, a.student_name, a.score, 
100 - a.score as 'wrong_score' # 必须要对新产生的字段给出字
段名,否则可能会报错。
FROM student a;

场景七:屏蔽底层实现逻辑及频繁的变更

比如:考试总分100分,查询所有学生做错的题目的分数:

CREATE VIEW v_student7
AS
SELECT a.student_id,a.student_name, a.score,100 - a.score as 'wrong_score'
FROM student a;

场景八:合并多个分离的子表

比如:假如有3个学校,每个学校的学生数据在各自的表中,如何一次性查询所
有学生的信息:

CREATE VIEW v_student8
AS
SELECT * FROM student1
UNION ALL
SELECT * FROM student2
UNION ALL
SELECT * FROM student3;

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

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

相关文章

迭代器模式 实现ES大量数据查询

目录 项目需求 要求 普通策略 升级策略:使用迭代器模式 迭代器模式组成 代码实现 查询实体 返回实体 实现类 代码测试 mock的ES返回结果json数据 第一次返回结果 第二次返回结果 第三次返回结果 postMan请求, 控制台打印结果 项目需求 数据从Mysq…

云计算服务安全指南

声明 本文是学习GB-T 31167-2014 信息安全技术 云计算服务安全指南. 下载地址而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 云计算服务安全退出服务 9.1退出要求 合同到期或其他原因都可能导致客户退出云计算服务,或将数据和业务系统迁…

植物大战僵尸:代码实现自动收集阳光

通过阳光增加的值为切入点,找到自动收集阳光的关键判断并实现自动收集阳光,首先我们猜测当阳光出现后,我们是否会去点击,这个过程必然是由一个判断和一个时钟周期事件来控制的,那么当我们点击下落的阳光以后&#xff0…

DC-UNet:重新思考UNet架构和双通道高效CNN医学图像

摘要 经典UNet的体系架构在某些方面存在着局限性。因此本文对其结构提出了改进。1)设计高效的CNN架构来取代编码器和解码器;2)在最先进的U-Net模型的基础上,应用残差模块来取代编码器和解码器之间的跳过连接来进行改进。 医学图像分割是通过一些自动和半自动的方法…

linux系统中块设备的基本实现方法

大家好,今天主要和大家聊一聊,如何使用linux系统中的块设备的实现方法。 目录 第一:块设备基本简介 第二:块设备驱动框架 第三:实现程序代码实现 第一:块设备基本简介 块设备驱动与字符设备驱动之间的主…

双指针:环形链表II

题目:142. 环形链表 II 我们知道,判断一个链表是否为环是这样的: public boolean hasCycle(ListNode head) {ListNode slow head,quickly head;while(quickly ! null && quickly.next ! null){slow slow.next;quickly quickly.n…

【javaSE】中异常如何处理

目录 文章目录 一、异常的初识 1.1异常的概念 1.2异常的体系结构 1.3异常的分类 二、异常的处理和抛出 2.1防御式编程 2.2异常的抛出 2.3异常的捕获 2.4异常的处理流程 三、自定义异常类 3.1举例:实现一个用户登录功能 一、异常的初识 1.1异常的概念 在…

Perl语法

Perl从许多语言中借用了语法和概念:awk,sed,C,Bourne Shell,Smalltalk,Lisp甚至是英语。每个简单的语句必须以分号(;)结尾,和Java类似,与Python不同。 一、扩…

【苹果推群发iMessage推】软件安装它起首将消息发送到Apple Push服务器,而后Apple Push服务器将消息发送到装配了应用程序的手机

推荐内容IMESSGAE相关 作者推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者推荐内容3.日历推 *** 点击即可查看作者要求内容信息作者推荐…

《小猫猫大课堂》——数组,操作符,常见关键字

更新不易,麻烦多多点赞,欢迎你的提问,感谢你的转发, 最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!! 喵喵喵,你对我…

Java--方法重写

1)概念 重写(override):也称为覆盖。重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程 进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据…

VUE动态组件,插槽和自定义指令

文章目录动态组件1.component组件的使用-keep-alive的使用keep-alive生命周期学习keep-alive组件的include和exclude属性include(指定keep-alive的哪些组件可以被缓存,不指定的话默认所有都会被缓存)exclude(排除项,与include刚好相反,二者不能同时使用)插槽v-slot指令v-slot的…

NodeJS - Express使用

文章目录1. 参数1.1 获取URL中的动态参数2. 静态资源2.1 挂载路径前缀3. nodemon4.1路由4.1 路由的匹配过程4.2 模块化路由4.3 为路由模块添加前缀5. 中间件5.1 全局生效的中间件5.2 全局生效中间件的简化形式5.3 中间件的作用5.4 局部生效的中间件5.5 定义多个局部中间件5.6 使…

计算机xxxxxxx

文章目录1.互联网的两大组成部分(边缘部分与核心部分)的特点是什么?它们的工作方式各有什么特点?2.简述分组交换的要点。3.试从多个方面比较电路交换、报文交换和分组交换的主要优缺点。4.网络协议的三个要素是什么?各…

十二、生产者和消费者问题、队列、线程池

内容 理解消费者、生产者的案例执行过程, 理解用队列方式做消费者、生产者的案例 会使用线程池运行任务, 理解ThreadPoolExecutor7个参数的含义(会根据需要 通过参数控制线程池的总数量) 匿名内部类里的异常处理 Thread 使用匿名内部类…

VScode中不同目录间python库函数的调用

问题描述 vscode中跨目录的模块调用远不如pycharm中的来的简单,在pycharm中即使是不同库文件夹中子函数也可以进行互相调用。而在VScode中则需要我们手动向其中添加依赖路径。如下相同的文件结构,在pycharm中可以简单的在model_arc_pesudo中导入model中的…

HTTP传输过程

简介 HTTPS是在HTTP的基础上和ssl/tls证书结合起来的一种协议,保证了传输过程中的安全性,减少了被恶意劫持的可能.很好的解决了解决了http的三个缺点(被监听、被篡改、被伪装) 对称加密和非对称加密 对称加密 即加密的密钥和解密的密钥相同, 非对称加…

1801. 积压订单中的订单总数

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家一起学习鸭~~~ 题目: 给你一个二维整数数组 orders &…

【HTMLCSS】运维、后端你该会的前端基本内容

文章目录前言一、HTML5基础1.1、前端开发的核心技术1.2、Web组成标准1.3、HTML 实例1.3.1、第一个网页1.4、 文本标签1.5、转义字符1.6、图片1.7、超链接1.8、列表1.8.1、无序列表1.8.2、有序列表1.8.3、自定义列表1.9、表格1.9.1、合并单元格1.10、表单二、CSS基础2.1、入门2.…

【论文导读】Stable Learning via Sparse Variable Independence

准备follow一下稳定学习的系列论文,从这篇开始吧。 AAAI2023上的,主要是根据前几年稳定学习组提出的SV特征分类、关注稳定的S特征的样本重加权的优化 针对问题和措施: 稳定学习算法采用的样本重加权有弊端: 1,在有限…