当前位置:网站首页>【MySQL】数据库视图的介绍、作用、创建、查看、删除和修改(附练习题)
【MySQL】数据库视图的介绍、作用、创建、查看、删除和修改(附练习题)
2022-07-04 06:29:00 【小黄小黄不再迷茫】
个人主页:黄小黄的博客主页
️ 支持我: 点赞 收藏 关注
格言:一步一个脚印才能承接所谓的幸运本文来自专栏:MySQL8.0学习笔记
本文参考视频:MySQL数据库全套教程
欢迎点击支持订阅专栏 ️
1 视图的介绍与作用
视图的介绍:
- 视图 view 是一个虚拟表,非真实存在,其 本质是根据SQL语句获取动态的数据集,并为其命名, 用户使用时只需要使用视图名称即可获取结果集,并可以将其当作表来使用。
- 数据库中只存放了视图的定义,而并没有存放视图中的数据。 数据还存在于原来的数据表中。
- 使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。因此, 视图中的数据是依赖于原来表中数据的。 当表的数据发生改变,视图中的数据也会随之改变。
视图的作用:
- 简化代码, 我们可以把重复使用的查询封装成视图重复使用,同时可以 使复杂的查询易于理解;
- 更加安全, 比如,如果有一张表中有很多数据,很多信息不希望被其他人看到,这时就可以使用到视图,对不同的用户使用不同的视图。
2 视图的创建
创建视图的语法如下:
create [or replace] [algorithm = {
undefined | merge | temptable}]
view view_name [(column_list)]
as select_statement
[with [cascaded | local] check option]
参数说明:
- algorithm: 表示视图选择的算法,可选;
- view_name: 创建的视图名称;
- column_list: 指定视图中各个属性的名词,默认情况下与SELECT语句中查询的属性相同;
- select_statement: 表示一个完整的查询语句,将查询记录导入视图中;
- [with [cascaded | local] check option]: 表示更新视图时要保证该视图在权限范围之内。
3 视图的修改
修改视图是指修改数据库中已存在的表的定义。当基本表中的某些字段发生改变时,可以通过修改视图来保持视图和基本表之间的一致。
️ 语法格式:
alter view 视图名 as select语句;
4 视图的更新
并不是所有的视图都可以更新。可以在UPDATE、DELETE或INSERT等语句中使用视图,以更新基本表的内容。对于可更新的视图,在视图中的行和基本表中的行之间必须具有一对一的关系,如果视图包含下述结构中的任何一种,则该视图不可更新:
- 聚合函数(SUM()、MIN()、MAX()等);
- DISTINCT;
- HAVING;
- UNION或者UNION ALL;
- 位于选择列表中的子查询;
- JOIN;
- FROM子句中的不可更新视图;
- WHERE子句中的子查询,引用FROM子句中的表;
- 仅使用文字值(在该情况下,没有要更新的基本表)。
注意:
视图中虽然可以更新数据,但是有很多限制。一般情况下,最好将视图作为查询数据的虚拟表,而不要通过视图更新数据。
当真实表中修改了某个存在视图中的字段时,视图需要更新,否则该视图就会变成无效视图!
5 视图的重命名与删除
重命名视图:
rename table 视图名 to 新视图名;
删除视图:
drop view if exists 视图名;
删除视图时,只删除了视图的定义,而并不会删除真实表中的数据
如果想同时删除多个视图,则使用下面的语法格式:
drop view if exists 视图名1, 视图名2, 视图名3...;
6 视图的练习
6.1 数据准备
在进行练习时可以先根据下面代码创建用于练习的两个基本表:
create table college
(
cno int null,
cname varchar(20) null
);
create table student
(
sid int null,
name varchar(20) null,
gender varchar(20) null,
age int null,
birth date null,
address varchar(20) null,
score double null
);
两表的基本数据如下图所示:
6.2 查询平均分最高的学校名称
结合之前学过的知识可以 尝试使用子查询和连接查询 来实现,参考代码如下:
SELECT cname
FROM (SELECT cname, rank() over (order by avg_score desc ) item
FROM (SELECT cname, avg(score) avg_score
FROM student
JOIN college ON sid = cno
GROUP BY cname) t) tt
WHERE item = 1;
在上述代码中,先将student 与 college两表关联,将关联的查询作为子表,并根据子表进行平均数的排序,平均数序号为1的平均分数最高,再以此为子表进行子查询,查询出了平均分最高的学校。具体结果如下:
这种方式虽然能够解决问题,但是相对复杂,不容易看懂,为了简化代码,我们可以将每一个子查询创建为一个视图
视图解决方式代码:
-- 1 视图一,连接两表并计算平均数
CREATE VIEW t_view AS
SELECT cname, avg(score) avg_score
FROM student
JOIN college ON sid = cno
GROUP BY cname;
-- 2 视图二,利用视图一对平均分数进行排序标号
CREATE VIEW tt_view AS
SELECT cname, rank() over (order by avg_score desc ) item
FROM (t_view);
-- 3 利用视图查询
SELECT cname
FROM (tt_view)
WHERE item = 1;
在创建完视图后,如果想要查询平均分前三名学校,则方便很多,创建好的视图可以直接使用!
参考代码及结果:
SELECT cname
FROM (tt_view)
WHERE item = 1
OR item = 2
OR item = 3;
写在最后
以上便是本文的全部内容啦,后续内容将会持续免费更新,如果文章对你有所帮助,麻烦动动小手点个赞 + 关注,非常感谢 ️ ️ ️ !
如果有问题,欢迎私信或者评论区!
共勉:“你间歇性的努力和蒙混过日子,都是对之前努力的清零。”
边栏推荐
- Qt发布多语言国际化翻译
- 《ClickHouse原理解析与应用实践》读书笔记(4)
- Grounding relay dd-1/60
- JSON Web Token----JWT和傳統session登錄認證對比
- 11. Dimitt's law
- Stc8h development (XII): I2C drive AT24C08, at24c32 series EEPROM storage
- STC8H开发(十二): I2C驱动AT24C08,AT24C32系列EEPROM存储
- Leakage detection relay jy82-2p
- C realize Snake games
- MySQL learning notes 3 - JDBC
猜你喜欢
Reading notes of Clickhouse principle analysis and Application Practice (4)
体验碎周报第 102 期(2022.7.4)
《ClickHouse原理解析与应用实践》读书笔记(4)
AWT common components, FileDialog file selection box
Practical gadget instructions
[Android reverse] function interception (CPU cache mechanism | CPU cache mechanism causes function interception failure)
ORICO ORICO outdoor power experience, lightweight and portable, the most convenient office charging station
QT qtablewidget table column top requirements ideas and codes
17-18. Dependency scope and life cycle plug-ins
C實現貪吃蛇小遊戲
随机推荐
Dimension and format of data
注释与注解
Weekly summary (*63): about positive energy
STC8H开发(十二): I2C驱动AT24C08,AT24C32系列EEPROM存储
Arcpy uses the updatelayer function to change the symbol system of the layer
My NVIDIA developer journey - optimizing graphics card performance
Layoutmanager layout manager: flowlayout, borderlayout, GridLayout, gridbaglayout, CardLayout, BoxLayout
FRP intranet penetration, reverse proxy
Sword finger offer II 038 Daily temperature
Learn about the Internet of things protocol WiFi ZigBee Bluetooth, etc. --- WiFi and WiFi protocols start from WiFi. What do we need to know about WiFi protocol itself?
剑指 Offer II 038. 每日温度
C语言练习题(递归)
Stc8h development (XII): I2C drive AT24C08, at24c32 series EEPROM storage
4G wireless all network solar hydrological equipment power monitoring system bms110
InputStream/OutputStream(文件的输入输出)
采用中微BATG135实现IIC数据/指令交互
QT qtablewidget table column top requirements ideas and codes
How to implement lazy loading in El select (with search function)
实用的小工具指令
How to solve the component conflicts caused by scrollbars in GridView