数据库中的视图

ops/2024/11/28 11:08:47/

数据库中的视图

  • 什么是视图
  • 创建视图
  • 使⽤视图
  • 修改数据
    • 注意事项
  • 删除视图
  • 视图的优点

什么是视图

视图是⼀个虚拟的表,它是基于⼀个或多个基本表或其他视图的查询结果集。视图本⾝不存储数
据,⽽是通过执⾏查询来动态⽣成数据。⽤户可以像操作普通表⼀样使⽤视图进⾏查询、更新和管
理。视图本⾝并不占⽤物理存储空间,它仅仅是⼀个查询的逻辑表⽰,物理上它依赖于基础表中的数
据。

创建视图

sql"># 语法
CREATE VIEW view_name [(column_list)] AS select_statement

使⽤视图

• 查询⽤户的所有信息和考试成绩

sql"># 使用真实表进行查询
select s.student_id,s.sn,s.name,s.mail,cla.class_id,cla.name,c.course_id,c.name,sc.score
from student s,class cla,course c,score sc
where s.student_id = sc.student_id andcla.class_id = s.class_id andc.course_id = sc.course_id
order bys.student_id;
sql"># 创建视图,在select中使用别名
create view v_student_score as(select s.student_id,s.sn,s.name as student_name,s.mail,cla.class_id,cla.name as class_name,c.course_id,c.name course_name,sc.scorefrom student s,class cla,course c,score scwhere s.student_id = sc.student_id andcla.class_id = s.class_id andc.course_id = sc.course_idorder bys.student_id
)
sql"># 创建视图,指定结果集中的列名
create view v_student_score_v1
(student_id,sn,student_name,mail,class_id,class_name,course_id,course_name,score) 
as (select s.student_id,s.sn,s.name,s.mail,cla.class_id,cla.name,c.course_id,c.name,sc.scorefrom student s,class cla,course c,score scwhere s.student_id = sc.student_id andcla.class_id = s.class_id andc.course_id = sc.course_id
);
sql"> select * from v_student_score;select * from v_student_score_v1;

• 查询⽤户的姓名和总分,(隐藏学号和各科成绩)

sql"> # 查询用户的姓名和总分,(隐藏学号和各科成绩)# 使用真实表进行查询
select s.name,sum(sc.score) total 
from student s,score sc 
where sc.student_id = s.student_id 
group by sc.student_id 
order by sc.student_id;
sql"># 如果使用真实表,在查询列表中随时可以加上学号字段
# 创建视图
create view v_student_total_points as (select s.name,sum(sc.score) total from student s,score sc where sc.student_id = s.student_id group by sc.student_id order by sc.student_id
);
sql"># 使用视图查询,只能查到学生姓名和总分,不能再添加查询字段
select * from v_student_total_points;

在这里插入图片描述
• 视图和真实表进⾏表连接查询

sql"># 视图和真实表进行表连接查询
select * from v_student_total_points v, student s where v.name = s.name;

在这里插入图片描述

修改数据

• 通过真实表修改数据,会影响视图

sql">select * from v_student_score_v1 where student_name = '黑旋风李逵' and course_name = 'java';# 修改黑旋风李逵的java成绩为99分
select * from student;
select * from course;
update score set score = 99 where student_id = 1 and course_id = 1;# 查询视图,发现黑旋风李逵这条记录已被修改
select * from v_student_score_v1 where student_name = '黑旋风李逵' and course_name = 'java';

• 通过视图修改数据会影响基表

sql">select * from v_student_score_v1 where student_name = '许仙' and course_name = 'java';# 在视图中修改许仙的java成绩改为99分
update v_student_score_v1 set score = 99 where student_name = '许仙' and course_name = 'java';select * from v_student_score_v1 where student_name = '许仙' and course_name = 'java';# 是看真实表数据已被修改
select * from score where student_id = 4 and course_id = 1;

注意事项

  • 修改真实表会影响视图,修改视图同样也会影响真实表
  • 以下视图不可更新:
    • 创建视图时使⽤聚合函数的视图
    • 创建视图时使⽤ DISTINCT
    • 创建视图时使⽤ GROUP BY 以及 HAVING ⼦句
    • 创建视图时使⽤ UNION 或 UNION ALL
    • 查询列表中使⽤⼦查询
    • 在FROM⼦句中引⽤不可更新视图

删除视图

sql"># 语法
drop view view_name;
sql">drop view v_student_score_v1;drop view v_student_total_points;drop view v_student_score;

视图的优点

  1. 简单性:视图可以将复杂的查询封装成⼀个简单的查询。例如,针对⼀个复杂的多表连接查询,可以创建⼀个视图,⽤户只需查询视图⽽⽆需了解底层的复杂逻辑。
  2. 安全性:通过视图,可以隐藏表中的敏感数据。例如,⼀个系统的⽤户表中,可以创建⼀个不包含密码列视图,普通⽤户只能访问这个视图,⽽不能访问原始表。
  3. 逻辑数据独⽴性:视图提供了⼀种逻辑数据独⽴性,即使底层表结构发⽣变化,只需修改视图定
    义,⽽⽆需修改依赖视图的应⽤程序。使⽤到应⽤程序与数据库的解耦
  4. 重命名列:视图允许⽤户重命名列名,以增强数据可读性。

关于数据库中视图的学习和了解先学习到这里,希望这篇文章对大家有帮助,谢谢大家的阅读!!!


http://www.ppmy.cn/ops/137333.html

相关文章

Swift——自动引用计数ARC

ARC ARC是swift使用的一种管理应用程序内存的机制,对于C语言我们知道,当我们申请一块空间,通常需要手动释放,不然会造成空间浪费,而有了ARC机制,你无需考虑内存的管理,因为ARC会在类的实例不再…

医学机器学习:数据预处理、超参数调优与模型比较的实用分析

摘要 本文介绍了医学中的机器学习,重点阐述了数据预处理、超参数调优和模型比较的技术。在数据预处理方面,包括数据收集与整理、处理缺失值、特征工程等内容,以确保数据质量和可用性。超参数调优对模型性能至关重要,介绍了多种调…

深度学习中的梯度下降算法:详解与实践

梯度下降算法是深度学习领域最基础也是最重要的优化算法之一。它驱动着从简单的线性回归到复杂的深度神经网络模型的训练和优化。作为深度学习的核心工具,梯度下降提供了调整模型参数的方法,使得预测的结果逐步逼近真实值。本文将从梯度下降的基本原理出…

Linux操作系统2-进程控制3(进程替换,exec相关函数和系统调用)

上篇文章:Linux操作系统2-进程控制2(进程等待,waitpid系统调用,阻塞与非阻塞等待)-CSDN博客 本篇代码Gitee仓库:Linux操作系统-进程的程序替换学习 d0f7bb4 橘子真甜/linux学习 - Gitee.com 本篇重点:进程替换 目录 …

Elasticsearch ILM 索引生命周期管理讲解与实战

ES ILM 索引生命周期管理讲解与实战 Elasticsearch ILM索引生命周期管理:深度解析与实战演练1. 引言1.1 背景介绍1.2 研究意义2. ILM核心概念2.1 ILM的四个阶段2.1.1 Hot阶段2.1.2 Warm阶段2.1.3 Cold阶段2.1.4 Delete阶段3. ILM实战指南3.1 定义ILM策略3.1.1 创建ILM策略3.1.…

STM32-- 调试- 延时、编译空循环

编译对空循环的处理,会影响堵塞延时效果,具体怎么处理的还不知道,只知道结果和现象。 模拟串口输出字符,用到延时函数,同样的延时函数,会有正常和不正常输出的情况;具体现象如下, /…

vi/vim文件管理命令练习

一.练习要求 文件管理命令练习: (1)在/opt目录下创建一个临时目录tmp; (2)在临时目录下创建一个文件,文件名为a.txt;vi/vim练习: (1) 应用vi命令在/tmp文件夹下创建文…

QChart数据可视化

目录 一、QChart基本介绍 1.1 QChart基本概念与用途 1.2 主要类的介绍 1.2.1 QChartView类 1.2.2 QChart类 1.2.3QAbstractSeries类 1.2.4 QAbstractAxis类 1.2.5 QLegendMarker 二、与图表交互 1. 动态绘制数据 2. 深入数据 3. 缩放和滚动 4. 鼠标悬停 三、主题 …