SQL自学:怎么创建视图

在 SQL 中,视图是一种虚拟表,它是基于一个或多个表的查询结果集。视图并不实际存储数据,而是在每次查询时动态生成结果。

一、创建视图的语法(以 MySQL 为例)

CREATE VIEW view_name AS
SELECT column1, column2,...
FROM table_name
WHERE condition;
  • view_name:是要创建的视图的名称。
  • column1, column2,...:要在视图中显示的列名,可以是一个或多个表中的列。
  • table_name:是从中获取数据的表名。
  • condition:可选的筛选条件,用于限制视图中的数据。

例如:

CREATE VIEW customer_orders_view AS
SELECT c.customer_name, o.order_date, o.total_amount
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id;

这个视图将从customers表和orders表中获取客户名称、订单日期和订单总金额,并将其命名为customer_orders_view

更多例子:

例子一:基于单个表创建视图

假设有一个名为 employees 的表,包含 employee_idemployee_namedepartment 和 salary 列。

创建一个视图,只显示特定部门的员工信息:

CREATE VIEW it_department_employees AS
SELECT employee_id, employee_name, salary
FROM employees
WHERE department = 'IT';

这段 SQL 语句用于创建一个名为“it_department_employees”的视图。

这个视图是基于名为“employees”的表创建的。

它从“employees”表中选取了“employee_id”(员工编号)、“employee_name”(员工姓名)和“salary”(工资)这三个列的数据。并且通过“WHERE department = 'IT'”这个条件筛选,只选择了那些所在部门为“IT”的员工记录。

这个视图的作用是提供了一种方便的方式来查看特定部门(IT 部门)的员工信息,而无需每次都执行复杂的查询语句。它可以在后续的查询中像一个普通表一样被使用,提高了查询效率和代码的可读性。同时,由于视图是虚拟表,不实际存储数据,所以当底层的“employees”表中的数据发生变化时,这个视图的结果也会自动更新。

例子二:基于多个表的连接创建视图

假设有两个表,customers(包含 customer_idcustomer_namecity)和 orders(包含 order_idcustomer_idorder_datetotal_amount)。

创建一个视图,显示每个客户的名称、所在城市以及他们的订单总数和总金额:

CREATE VIEW customer_order_summary AS
SELECT c.customer_name, c.city, COUNT(o.order_id) AS total_orders, SUM(o.total_amount) AS total_amount
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
GROUP BY c.customer_id, c.customer_name, c.city;

这段 SQL 语句创建了一个名为“customer_order_summary”的视图。

该视图是基于“customers”表(别名“c”)和“orders”表(别名“o”)创建的。

它从两个表中选取特定的信息来展示客户的订单汇总情况。具体来说,选择了“customers”表中的“customer_name”(客户姓名)和“city”(客户所在城市),同时通过对“orders”表中的“order_id”进行计数(使用“COUNT(o.order_id)”并别名为“total_orders”)得到每个客户的订单总数,以及对“orders”表中的“total_amount”进行求和(使用“SUM(o.total_amount)”并别名为“total_amount”)得到每个客户的总金额。

通过使用“JOIN”关键字将“customers”表和“orders”表基于“c.customer_id = o.customer_id”这个条件进行连接,确保只选取有订单的客户信息。最后,使用“GROUP BY”按照“customers”表中的“customer_id”、“customer_name”和“city”对结果进行分组,使得每个客户的信息和其对应的订单汇总数据相对应。

这个视图的作用是为了方便地查看每个客户的姓名、所在城市以及他们的订单总数和总金额,而无需每次都执行复杂的连接和聚合查询操作,提高了查询效率和数据的可读性。

例子三:使用聚合函数创建视图

假设有一个销售数据表 sales_data,包含 product_idquantity_soldprice

创建一个视图,显示每个产品的总销售额:

CREATE VIEW product_sales AS
SELECT product_id, SUM(quantity_sold * price) AS total_sales
FROM sales_data
GROUP BY product_id;

这段 SQL 语句用于创建一个名为“product_sales”的视图。

这个视图是基于“sales_data”表创建的。

它从“sales_data”表中选取“product_id”列,同时通过计算“quantity_sold”(销售数量)和“price”(价格)的乘积并求和(使用“SUM(quantity_sold * price)”),将结果别名为“total_sales”,代表每个产品的总销售额。 通过“GROUP BY product_id”按照产品编号进行分组,确保计算出的总销售额是针对每个不同的产品的。

这个视图的作用在于提供了一种便捷的方式来查看每个产品的总销售额情况,而无需每次都执行复杂的聚合计算查询。它使得对产品销售情况的分析更加高效和方便,提高了数据的可读性和查询效率。

例子四:结合条件筛选和聚合创建视图

假设有一个库存表 inventory,包含 item_iditem_namequantity_in_stockreorder_level

创建一个视图,显示需要补货的物品名称和当前库存数量:

CREATE VIEW items_to_reorder AS
SELECT item_name, quantity_in_stock
FROM inventory
WHERE quantity_in_stock < reorder_level;

这段 SQL 语句创建了一个名为“items_to_reorder”的视图。

该视图是基于“inventory”表构建的。

它从“inventory”表中选取“item_name”(物品名称)和“quantity_in_stock”(当前库存数量)这两列的数据。通过“WHERE quantity_in_stock < reorder_level”这个条件筛选,只选择那些当前库存数量小于重新订购水平(reorder_level)的物品记录。

这个视图的目的是提供一种快速查看需要补货的物品信息的方式。它可以在后续的查询中像普通表一样被使用,使得用户能够方便地确定哪些物品需要进行重新订购,而不必每次都执行复杂的条件查询操作,提高了查询效率和数据的可读性。

二、管理视图的规则和约束

1、命名规则

  • 视图名称必须遵循数据库的命名规则,通常与表名的命名规则相似。
  • 视图名称应该具有描述性,以便于理解其内容。

2、基于现有表或视图

  • 视图可以基于一个或多个现有表,也可以基于其他视图。
  • 当基于其他视图创建视图时,要确保底层的表或视图的数据是稳定的,否则可能会导致视图的结果不准确。

3、数据更新限制

  • 对视图的更新操作可能会受到限制,具体取决于数据库管理系统和视图的定义。
  • 一些数据库管理系统允许对可更新视图进行插入、更新和删除操作,但这些操作必须符合一定的条件。
  • 如果视图是基于多个表的连接或包含聚合函数等复杂查询,通常是不可更新的。

4、性能考虑

  • 视图的查询性能可能会受到底层表的结构和数据量的影响。
  • 如果视图的查询非常复杂或涉及大量数据,可能会导致性能下降。在这种情况下,可以考虑优化底层表的结构或创建索引来提高性能。

5、权限管理

  • 可以对视图设置权限,以控制用户对视图的访问。
  • 可以授予用户对视图的 SELECT、INSERT、UPDATE 和 DELETE 等权限,具体取决于业务需求。

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

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

相关文章

leetcode哈希表(二)-两个数组的交集

题目 . - 力扣&#xff08;LeetCode&#xff09; 给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的交集。输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 输出&#xff1a;[…

【c++篇】:初识c++--编程新手的快速入门之道(二)

文章目录 前言一.引用1.引用的概念2.引用的特性3.引用的使用场景4.常引用5.引用和指针的区别 二.内联函数1.C语言的宏函数2.内联函数的概念3.内联函数的特性 三.auto关键字1.auto的定义2.auto的使用规则3.auto不能推导的场景 四.基于范围的for循环1.范围for的语法2.范围for的使…

时间序列预测(七)——梯度消失(Vanishing Gradient)与梯度爆炸(Exploding Gradient)

目录 一、定义 二、产生原因 三、解决方法&#xff1a; 梯度消失与梯度爆炸是深度学习中常见的训练问题&#xff0c;它们主要发生在神经网络的反向传播过程中&#xff0c;使得模型难以有效学习。 一、定义 1、梯度消失&#xff08;Vanishing Gradient&#xff09;&#xf…

跟着导师学东西,学什么怎么学

获得老师帮助&#xff1a; 自己能有一些见解&#xff0c;让老师明白你是需要帮助的。 尽量让老师的帮助有正反馈。 增强自己表现力&#xff0c;多刷存在感&#xff08;要和自己能力尽量适配&#xff09; 不要羞于求助&#xff0c;内心戏不要太多&#xff0c;要多表达&#xff0…

PCL 点云配准-改进的RANSAC算法(粗配准)

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 计算FPFH特征 2.1.2 RANSAC配准 2.1.3 可视化点云 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff0…

FlinkCDC 实现 MySQL 数据变更实时同步

文章目录 1、基本介绍2、代码实战2.1、数据源准备2.2、代码实战2.3、数据格式 1、基本介绍 Flink CDC 是 Apache Flink 提供的一个功能强大的组件&#xff0c;用于实时捕获和处理数据库中的数据变更。可以实时地从各种数据库&#xff08;如MySQL、PostgreSQL、Oracle、MongoDB…

【图论】(一)图论理论基础与岛屿问题

图论理论基础与岛屿问题 图论理论基础深度搜索&#xff08;dfs&#xff09;广度搜索&#xff08;bfs&#xff09;岛屿问题概述 岛屿数量岛屿数量-深搜版岛屿数量-广搜版 岛屿的最大面积孤岛的总面积沉没孤岛建造最大人工岛水流问题岛屿的周长 图论理论基础 这里仅对图论相关核…

java学习--集合(大写五.5)

5.collection子接口&#xff1a;Set 5.1Set及其实现类特点 java.util.Collection:存储一个一个的数据 子接口&#xff1a;Set:存储无序的、不可重复的数据(高中学习的集合) 1&#xff09;HashsSet主要实现类 底层使用的是HashMap&#xff0c;即使用数组单向链表红黑树结构进行…

netron安装(windows linux)

目录 netron简介 不同操作系统的安装方式 linux windows mac系统 netron简介 netron可视化工具&#xff0c;是一个可以清晰的看到神经网络模型的每一层的输入输出&#xff0c;网络总体的架构&#xff0c;而且支持各种不同网络框架&#xff0c;简单好用。 效果如下所示 不…

028 elasticsearch索引管理-ElasticsearchRestTemplate

文章目录 pom.xmlapplication.ymlCubemallSearchApplication.javaRestClientTest.java使用ElasticsearchRestTemplate对象Blog.javaRestTemplateTest.java pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-s…

.net core 3.0 与 6.0 有哪些不同

.NET Core 3.0 和 .NET 6.0&#xff08;注意&#xff0c;从 .NET 5.0 开始&#xff0c;微软将 .NET Core 和 .NET Framework 合并为一个统一的 .NET 平台&#xff09;之间有许多重要的区别。这些区别包括性能改进、新功能、API 的变化以及对不同平台的支持。下面是一些主要的区…

【视频笔记】408新增知识点信号——里昂视频

文章目录 **2.信号****3.信号的实现**4.信号的处理**①忽略信号****②执行信号的默认操作****③捕获井处理信号**几个Linux支持的典型信号&#xff1a; **5.信号的产生**① **通过终端按键(键盘)产生信号**例如&#xff0c;CtrlC发送2号信号SIGINT、Ctrl\发送3号信号SIGQUIT② …

大数据面试题整理——HDFS

大数据面试题整理 第一章 HDFS面试题 第二章 MapReduce面试题 文章目录 大数据面试题整理一、请简要介绍一下 HDFS。二、HDFS 的主要特点有哪些&#xff1f;三、说说 HDFS 的架构&#xff0c;以及 NameNode 和 DataNode 的作用。四、什么是心跳机制&#xff1f;五、解释一下 H…

详解SSH和bash

1. SSH&#xff08;Secure Shell&#xff09; SSH 是你在远程登录到Linux服务器时使用的工具。假设你有一台远程服务器&#xff0c;你想从自己的电脑登录到这台服务器进行操作&#xff0c;SSH 就是你使用的工具。 示例&#xff1a; 你在自己的电脑上打开终端&#xff0c;输入…

使用Python爬虫API,轻松获取电商商品SKU信息

在电子商务的复杂世界中&#xff0c;SKU&#xff08;Stock Keeping Unit&#xff0c;库存单位&#xff09;信息是连接供应商、库存、销售和客户服务的桥梁。它不仅包含了商品的规格、价格、库存等关键数据&#xff0c;还直接影响到库存管理、价格策略和市场分析等多个方面。在这…

爬虫逆向-js进阶

1.作用域和闭包 //作用域 // var a 3 // // function test(a){ // var a 1; // console.log(函数内部,a) // } // test(2) // // console.log(a)//闭包 // function jiami(){ // function encrypt(){ // console.log(在这里进行加密了) // } // p…

五个必备的高清无水印视频素材库推荐

做抖音、短视频创作的朋友都知道&#xff0c;优质的素材往往决定了作品能否获得更多关注。如果你还不知道在哪里下载高清无水印的视频素材&#xff0c;不用担心&#xff01;今天为你推荐5个高品质的视频素材库&#xff0c;助你轻松创作出爆款视频。 蛙学网 是国内领先的视频素材…

Mysql常用sql语句与刷题知识点

目录 1. 常用sql2. 刷题知识点 1. 常用sql #查询MySQL中所有的数据库 SHOW DATABASES; #查询当前正在使用的数据库 SELECT DATABASE();#普通创建&#xff08;创建已经存在的数据库会报错&#xff09; CREATE DATABASE 数据库名称; #创建并判断&#xff08;该数据库不存在才创建…

2.html编辑器介绍

html编辑器介绍 HTML 编辑器推荐 理论上我们可以使用记事本进行html编码和开发&#xff0c;但是在实际开发html页面的时候&#xff0c;使用一些专业的开发工具可以使我们更加快速和高效的进行开发&#xff0c;下面介绍几种开发工具&#xff1a; VS Code&#xff1a;https://…

006_django基于Python的二手房源信息爬取与分析2024_l77153d4

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…