数据库中的视图

news2024/11/28 3:01:44

数据库中的视图

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

什么是视图

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

创建视图

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

使⽤视图

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

# 使用真实表进行查询
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 and
	cla.class_id = s.class_id and
	c.course_id = sc.course_id
order by
	s.student_id;
# 创建视图,在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.score
	from 
		student s,class cla,course c,score sc
	where 
		s.student_id = sc.student_id and
		cla.class_id = s.class_id and
		c.course_id = sc.course_id
	order by
		s.student_id
)
# 创建视图,指定结果集中的列名
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.score
	from 
		student s,class cla,course c,score sc
	where 
		s.student_id = sc.student_id and
		cla.class_id = s.class_id and
		c.course_id = sc.course_id
);
 select * from v_student_score;
 
 select * from v_student_score_v1;

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

 # 查询用户的姓名和总分,(隐藏学号和各科成绩)
 # 使用真实表进行查询
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;
# 如果使用真实表,在查询列表中随时可以加上学号字段
# 创建视图
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
);
# 使用视图查询,只能查到学生姓名和总分,不能再添加查询字段
select * from v_student_total_points;

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

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

在这里插入图片描述

修改数据

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

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';

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

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⼦句中引⽤不可更新视图

删除视图

# 语法
drop view view_name;
drop view v_student_score_v1;

drop view v_student_total_points;

drop view v_student_score;

视图的优点

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

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

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

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

相关文章

爬虫实战:采集知乎XXX话题数据

目录 反爬虫的本意和其带来的挑战目标实战开发准备代码开发发现问题1. 发现问题[01]2. 发现问题[02] 解决问题1. 解决问题[01]2. 解决问题[02] 最终结果 结语 反爬虫的本意和其带来的挑战 在这个数字化时代社交媒体已经成为人们表达观点的重要渠道,对企业来说&…

springboot-vue excel上传导出

数据库 device_manage表 字段,id,workshop,device_number,device_name,device_model,warn_time,expired_time device_warn表 字段,id,warn_time,expired_time 后端 实体类格式 device_manage Data TableName("device_manage"…

【简单好抄保姆级教学】javascript调用本地exe程序(谷歌,edge,百度,主流浏览器都可以使用....)

javascript调用本地exe程序 详细操作步骤结果 详细操作步骤 在本地创建一个txt文件依次输入 1.指明所使用注册表编程器版本 Windows Registry Editor Version 5.00这是脚本的第一行,指明了所使用的注册表编辑器版本。这是必需的,以确保脚本能够被正确解…

Redis五大基本类型——Zset有序集合命令详解(命令用法详解+思维导图详解)

目录 一、Zset有序集合类型介绍 二、常见命令 1、ZADD 2、ZCARD 3、ZCOUNT 4、ZRANGE 5、ZREVRANGE 6、ZRANGEBYSCORE 7、ZREVRANGEBYSCORE 8、ZPOPMAX 9、ZPOPMIN 10、ZRANK 11、ZREVRANK 12、ZSCORE 13、ZREM 14、ZREMRANGEBYRANK 15、ZREMRANGEBYSCORE 16…

设计模式之 责任链模式

责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,旨在将多个处理对象通过链式结构连接起来,形成一条处理请求的链条。每个处理对象都有机会处理请求,或者将请求传递给链中的下一个对象。这样&#x…

新版布谷直播软件源码开发搭建功能更新明细

即将步入2025年也就是山东布谷科技专注直播系统开发,直播软件源码出售开发搭建等业务第9年,山东布谷科技不断更新直播软件功能,以适应当前新市场环境下的新要求。山东布谷科技始终秉承初心,做一款符合广大客户需求的直播系统软件。支持广大客户提交更多个…

VITE+VUE3+TS环境搭建

前言(与搭建项目无关): 可以安装一个node管理工具,比如nvm,这样可以顺畅的切换vue2和vue3项目,以免出现项目跑不起来的窘境。我使用的nvm,当前node 22.11.0 目录 搭建项目 添加状态管理库&…

HTML飞舞的爱心

目录 系列文章 写在前面 完整代码 代码分析 写在后面 系列文章 序号目录1HTML满屏跳动的爱心(可写字)2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4HTML情人节快乐5HTML蓝色爱心射线6HTML跳动的爱心(简易版)7HTML粒子爱心8HTML蓝色…

英伟达推出了全新的小型语言模型家族——Hymba 1.5B

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

低速接口项目之串口Uart开发(二)——FIFO实现串口数据的收发回环测试

本节目录 一、设计思路 二、loop环回模块 三、仿真模块 四、仿真验证 五、上板验证 六、往期文章链接本节内容 一、设计思路 串口数据的收发回环测试,最简单的硬件测试是把Tx和Rx连接在一起,然后上位机进行发送和接收测试,但是需要考虑到串…

《Java核心技术I》树集

树集 TreeSet类与散列类似,树集是一个有序集合(sorted collection)。 可以以任意顺序将元素插入到集合中,遍历集合时,自动按照排序后的顺序呈现。 插入5个字符串,访问添加的元素 package treeSet;import java.util.TreeSet;pu…

Tailwind CSS v4.0 开启

Tailwind CSS v4.0 发布了 Tailwind CSS 是一个为快速开发而精心设计的原子类 CSS 框架,它提供了充满设计感和应用程序至上的能力来创建组件,它在最新的 2.0 版本中加入了暗黑模式,开箱即用。 Tailwind Connect 大会上,与会者抢先…

QML TableView 实例演示 + 可能遇到的一些问题(Qt_6_5_3)

一、可能遇到的一些问题 Q1:如何禁用拖动? 在TableView下加一句代码即可: interactive: false 补充:这个属性并不专属于TableView,而是一个通用属性。很多Controls下的控件都可以使用,其主要作用就是控…

详细描述一下Elasticsearch更新和删除文档的过程?

大家好,我是锋哥。今天分享关于【详细描述一下Elasticsearch更新和删除文档的过程?】面试题。希望对大家有帮助; 详细描述一下Elasticsearch更新和删除文档的过程? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 E…

(五)Ubuntu22.04+Stable-Diffusion-webui AI绘画 模型转换插件安装及其使用

一、说明 这是秋叶大佬开发的一个模型转换插件,秋叶整合包中自带。如果你的 Stable Diffusion WebUI 中没有这个插件,请使用下面这个地址安装,安装完成之后别忘了重启 WebUI。 模型转换插件 https://github.com/Akegarasu/sd-webui-model-c…

Python数据分析实例五、US 大选捐款数据分析

美国联邦选举委员会 (FEC) 公布了对政治竞选活动的贡献数据。这包括投稿人姓名、职业和雇主、地址和投款金额。2012 年美国总统大选的贡献数据以单个 150 MB 的 CSV 文件P00000001-ALL.csv形式提供,该文件可以通过以下pandas.read_csv加载: import pandas as pdfec = pd.r…

原生微信小程序画表格

wxml部分&#xff1a; <view class"table__scroll__view"><view class"table__header"><view class"table__header__item" wx:for"{{TableHeadtitle}}" wx:key"index">{{item.title}}</view></…

TCP/IP协议攻击与防范

一、TCP/IP协议攻击介绍 1.1 Internet的结构​ LAN&#xff1a;局域网 WAN&#xff1a;广域网 WLAN&#xff1a;无线局域网 私有IP地址与公有IP地址&#xff1f; 私有地址&#xff1a;A类&#xff1a;10.0.0.0~10.255.255.255 B类&#xff1a;172.16.0.0~172.31.255.255…

微信小程序2-地图显示和地图标记

一、index修改页面&#xff0c;让页面能够显示地图和一个添加标记的按钮。 index.wxml <scroll-view class"scrollarea" scroll-y type"list"><view class"index_container"><map id"map" style"width: 100%; h…

【C++】从C语言到C++学习指南

如果你也是从C语言一路过来的&#xff0c;那么请一起看下去吧&#xff01; 文章目录 面型对象程序设计C基础C和C一些语法区别C在非对象方面对C语言的扩充C的一些标准&#xff08;兼容旧标准&#xff09; 首先&#xff0c;在C的学习中&#xff0c;我们要时刻清醒一点&#xff1…