GaussDB云数据库SQL应用系列-视图管理

news2024/11/26 0:51:18

一、前言

GaussDB是一款基于云计算技术的高性能关系型数据库,支持多种数据模型和分布式架构。在GaussDB中,视图管理是非常重要的一项功能,它可以帮助用户更方便地管理和查询数据。

数据库视图管理是指对数据库中的视图进行创建、修改、删除、查询等操作的过程。

二、准备条件

参考上一篇文章《GaussDB云数据库SQL应用系列-基础使用》

1、登录华为云数据库GaussDB

2、选择对应实例并进入到SQL执行界面

三、视图语法及参数

1、CREATE VIEW语法格式

CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] VIEW view_name [ ( column_name [, ...] ) ]

[ WITH ( {view_option_name [= view_option_value]} [, ... ] ) ]

AS query;

参数说明

  • OR REPLACE:如果视图已存在,则重新定义。
  • TEMP | TEMPORARY:创建临时视图。
  • view_name:要创建的视图名称。可以用模式修饰。
  • column_name:可选的名称列表,用作视图的字段名。如果没有给出,字段名取自查询中的字段名。
  • view_option_name [= view_option_value]:该子句为视图指定一个可选的参数。目前view_option_name支持的参数仅有security_barrier,当VIEW试图提供行级安全时,应使用该参数。
  • Query:为视图提供行和列的SELECT或VALUES语句。

2、DROP VIEW语法格式

DROP VIEW [ IF EXISTS ] view_name [, ...] [ CASCADE | RESTRICT ];

【参数说明】

  • IF EXISTS:如果指定的视图不存在,则发出一个notice而不是抛出一个错误。
  • view_name:要删除的视图名称。
  • CASCADE | RESTRICT:CASCADE:级联删除依赖此视图的对象(比如其他视图)。RESTRICT:如果有依赖对象存在,则拒绝删除此视图。此选项为缺省值。

四、操作示例

在数据库中,视图管理通常需要使用SQL语句来进行操作

1、创建基础表

1)创建一张订单表,其中包含字段:订单编号、订单日期、供货商编号、商品编号、商品名称、商品产地、商品数量、商品进价。

--删除表 order_info

DROP TABLE IF EXISTS order_info;

--创建表 order_info

CREATE TABLE order_info

(

order_id int PRIMARY KEY

,order_date date not null

,supplier_id int not null

,goods_id char(20) not null

,goods_name char(20) not null

,goods_home varchar(100) not null

,goods_number int not null

,goods_amount int not null

);

2)创建一张销售信息表,其中包含字段:销售编号、销售日期、商品编号、商品名称、商品数量、商品售价。

--删除表 sell_list_info

DROP TABLE IF EXISTS sell_list_info;

--创建表 sell_list_info

CREATE TABLE sell_list_info

(

sell_id int PRIMARY KEY

,sell_date date not null

,goods_id char(20) not null

,goods_name char(20) not null

,goods_number int not null

,sell_goods_amount int not null

);

3)创建一张商品信息管理表,其中字段包括:商品编号、商品条形码、商品名称、商品产地、商品存量、商品进价、商品售价、供应商编号、仓库编号。

--删除表 goods_info

DROP TABLE IF EXISTS goods_info;

--创建表 goods_info

CREATE TABLE goods_info

(

goods_id char(20) PRIMARY KEY

,goods_code varchar(50) not null

,goods_name char(20) not null

,goods_home varchar(100) not null

,goods_number int not null

,purchase_goods_amount int not null

,sell_goods_amount int not null

,supplier_id int not null

,warehouse_id int not null

);

2、设置视图应用场景

示例一,方便数据分析

视图可以用于对数据进行聚合、分组和筛选等操作,从而方便数据分析和报告生成。

场景:依据订单表,按商品名称及订货日期统计商品总数和总价、平均价格。

--删除视图

DROP VIEW IF EXISTS order_info_view;

--依据订单表,按商品名称及订货日期统计商品总数和总价、平均价格。

CREATE VIEW order_info_view

AS

SELECT goods_name

,order_date

,SUM(goods_number) AS total_number

,SUM(goods_number * goods_amount) AS total_amount

,AVG(goods_amount) AS avg_amount

FROM order_info

GROUP BY goods_name, order_date;

示例二,生成月度、年度报表

场景:依据销售表,按年度统计所有销售商品的销售总数量和总销售额,以及其对应的仓库编号和供应商编号。

--删除视图

DROP VIEW IF EXISTS sell_list_sum_view;

--依据销售表,按年度统计所有销售商品的销售总数量和总销售额,以及其对应的仓库编号和供应商编号。

CREATE VIEW sell_list_sum_view

AS

SELECT t1.goods_id

,t1.goods_name

,t1.s_year

,t1.total_number

,t1.total_amount

,t2.supplier_id

,t2.warehouse_id

FROM

(SELECT goods_id

,EXTRACT(YEAR FROM sell_date) AS s_year

,goods_name

,SUM(goods_number) AS total_number

,SUM(goods_number * sell_goods_amount) AS total_amount

FROM sell_list_info

GROUP BY goods_id

,EXTRACT(YEAR FROM sell_date)

,goods_name

) t1

LEFT JOIN

(SELECT goods_id

,supplier_id

,warehouse_id

FROM goods_info

) t2

ON t1.goods_id =t2.goods_id

示例三,实现数据安全

在某些情况下,应用程序需要对数据进行访问控制,例如只允许特定的用户或角色访问某些数据。使用视图可以轻松实现这种控制。

场景:只允许某个用户或角色访问某些数据(指定列),例如,只给用户zhangsan 访问“商品信息管理表(无此表访问权限)”的字段“商品名称、商品产地、商品存量、商品售价”。

通过创建视图,并赋予zhangsan访问此视图的权限

--删除视图

DROP VIEW IF EXISTS goods_info_view;

--只允许某个用户或角色访问某些数据(指定列)

--例如,给用户zhangsan 访问“商品信息管理表(无此表访问权限)”的字段“商品名称、商品存量、商品售价”。

--赋予zhangsan访问此视图的权限

CREATE VIEW goods_info_view

AS

SELECT goods_name

,goods_number

,sell_goods_amount

FROM goods_info;

--赋予zhangsan查询权限

GRANT SELECT ON goods_info_VIEW TO zhangsan;

示例四,简化复杂的查询

当需要对多个表进行联合查询时,可以使用视图来将这些表组合成一个单一的查询结果集,从而简化查询过程。

场景:基于上一篇文章中的学生课程成绩表,生成一张视图:获取学生的姓名、课程、成绩、代课老师的信息汇总数据

--删除视图

DROP VIEW IF EXISTS student_c_view;

--基于上一篇文章中的学生课程成绩表,生成一张视图:获取学生的姓名、课程、成绩、代课老师的信息汇总数据

CREATE VIEW student_c_view

AS

SELECT t2.sname

,t3.cname

,t1.scgrade

,t3.cteacher

FROM

(SELECT sno

,cno

,scgrade

FROM sc

) t1

LEFT JOIN students t2

ON t1.sno=t2.sno

left join course t3

ON t1.cno=t3.cno;

--查看结果

SELECT * FROM student_c_view;

五、小结

数据库视图是一种虚拟表,它是由一个查询语句定义的。视图可以看作是对数据集合的逻辑重组,用户可以通过视图来访问这些数据,而不必关心数据的存储方式和位置。

GaussDB提供了灵活的视图管理功能,包括创建(CREATE)、修改(OR REPLACE)、删除 (DROP)和查询(SELEC)视图等操作。视图是一种虚拟的表,它由一个或多个基本表的数据经过逻辑运算后得到。它可以简化复杂的数据结构,提高查询效率,同时也可以隐藏基本表的细节,用户可以根据自己的需求选择不同的视图类型和定义视图的列,以满足不同的数据分析和查询需求。同时,GaussDB还支持对视图进行权限控制,以保证数据的安全性和隐私性。

——结束

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

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

相关文章

美债危机现曙光,比特币再破2万8

* * * 原创:刘教链 * * * 号外:今天在小号“刘教链Pro”发表了一篇《常常自律,偶尔放纵》,谈了一下关于意志力和自制力的非同寻常的科学研究结论,及其对投资方法的启迪,欢迎关注“刘教链Pro”并阅读。 * *…

AI专业教您保姆级在暗影精灵8Windows11上本地部署实现AI绘画:Stable Diffusion(万字教程,多图预警)

目录 一、Stable Diffusion介绍 二、Stable Diffusion环境搭建 1.Anaconda下载与安装 2.Pycharm(IDE)下载与安装 3.CUDA、CuDNN下载与安装 三、Stable Diffusion的本地部署 1.克隆项目到本地 2.初始化打开项目 3.安装环境所需库 4.运行代码…

《逆袭进大厂》之C++篇49问49答

它是在 github 上的 clone 下来的仓库笔记 自己看书理解到的知识点 网上相关问题的博客总结这几大基础上慢慢总结形成的,并不仅仅只是简单的收集整理,没有加入自己思考的笔记没有灵魂。 在接下来的十篇文章里我会陆陆续续将自己的秋招笔记整理出来&…

家政服务预约APP的系统设计与实现

摘 要:针对家政行业蓬勃发展,老套的家政服务方式已经跟不上互联网时代的步伐这个问题。基于Android移动平台的分析和设计过程、C/S模式、Eclipse平台,采用Java语言进行开发设计,设计了基于MVC架构的实现方案。安卓客户端与服务器…

solr教程

一:安装配置 下载完成之后,解压solr文件,解压tomcat 1.1 在tomcat安装solr,并且建立solrCore 把solr5.5目录下的server/solr-webapp/webapp 重命名为solr,并且放置到tomcat/webapp的目录下。 打开tomcat/webapp/solr/WEB-INF/web.xml新建…

【入门必看,MySQL从0到1系列- 数据库保姆级图解教程:轻松掌握数据库管理技能】+福利网盘分享MySQL从0到1资料+课程教程+视频+源码

​​​​​​​ 福利:最新MySQL从0到1资料课程教程视频源码网盘 文末有分享哦 前言 MySQL 是全球最流行的用于管理关系数据库的开源数据库软件。除了具有强大的功能外,它还比 Microsoft SQL Server 和 Oracle 数据库快速、可扩展且更易于使用。因此&am…

【分布族谱】卡方分布和F分布之间的关系

文章目录 正态分布和卡方分布F分布 正态分布和卡方分布 正态分布,最早由棣莫弗在二项分布的渐近公式中得到,而真正奠定其地位的,应是高斯对测量误差的研究,故而又称Gauss分布。。测量是人类定量认识自然界的基础,测量…

项目经理提高绩效的10个目标

作者 | Fred Wilson 一、项目经理的目的和目标是什么? 项目经理是任何团队的重要成员。他们孜孜不倦地工作,以确保项目按时、在预算范围内完成,并达到尽可能高的标准。 然而,有一些目标可以帮助提高项目经理管理团队和组织工作流…

Python编程快速入门

Python编程环境设置 Python是一种解释性语言,它使用解释器来解释和执行代码,这对用户来说省去了C或C之类语言的编译步骤,直接从源代码即可运行,因此更容易编写和调试。工欲善其事,必先利其器。在学习Python编程之前&a…

ThreadLocal精讲

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

并行编程解决什么问题?

多线程爬虫是指通过多个线程并发地请求网页和解析响应,以提高爬虫的效率和速度。在 Python 中可以使用 threading、Queue 和 requests 等模块来实现。 并行编程是一种利用多个处理器/内核/线程来同时执行代码的编程方式。它可以解决以下几个问题: 提升程…

python卸载和安装

python卸载 进入电脑控制面板,点击卸载程序 搜索python,如果之前是安装成功的并且没用安装其它相关软件,应该会出现下图所示的两个,分别点击卸载 等待其卸载完毕 卸载结束 python下载 进入官网鼠标放在downloads下出现选项框后选择对应型号…

静态链接库顺序问题

前言 最近遇到了一个非常奇怪的问题,编译时竟因为链接库的顺序不同,就有完全不同的结果。代码非常简单如下所示: #include "muduo/net/EventLoop.h"int main() {muduo::net::EventLoop loop1;muduo::net::EventLoop loop2;return…

Tomcat之多JAVA环境JVM版本查看及使用优先级

一、前言 业务系统包含PC端和移动端,移动端为微信小程序。在小程序客户端发送消息未得到回应,查询系统后台日志发现报错日志。JDK或者JRE中自带的“local_policy.jar ”和“US_export_policy.jar”是支持128位密钥的加密算法,而当我们要使用2…

Linux开发工具vim篇

文章目录 👇0. 前言👉1.yum软件包管理器👏1.1 yum三板斧👌查看👌安装👌卸载 👏1.2 拓展yum源 👍2. vim编辑器🤏2.1 vim基本概念🤏2.2 vim基本操作&#x1f90…

电路仿真软件LTspice 使用教程

一、LTspice 特点 1、免费 2、电源快速仿真 3、涵盖大量ADI产品模型 二、获取方式 LTspice信息中心 | 亚德诺半导体 如下图所示,根据操作系统,下载对应的安装包安装即可。 软件打开界面如图: 三、运行演示电路 一、官网下载 LTspice演…

一文读懂kubernetes部署:网关部署

部署网关 如您需要创建SSL(HTTPS)站点请先参考SSL证书的创建创建好secret 修改Ingress配置域名 首先我们要先根据域名情况更改ingress配置情况: 非SSL站点 vi/opt/kubernetes/gateway/ingress.yaml SSL站点 创建secret kubectl-nns-javashopcreatesecrettlsxxx-se…

Caffeine本地缓存

1、Caffine简介 简单说,Caffine 是一款高性能的本地缓存组件 由下面三幅图可见:不管在并发读、并发写还是并发读写的场景下,Caffeine 的性能都大幅领先于其他本地开源缓存组件 2、常见的缓存淘汰算法 2.1、FIFO 它是优先淘汰掉最先缓存的数据…

SQL优化的方法

(1)建立物化视图或尽可能减少多表查询。 (2)以不相干子查询替代相干子查询。 (3)只检索需要的列。 (4)用带in的条件子句等价替换or子句。 (5)经常提交com…