当前位置: 首页 > news >正文

mysql学习教程,从入门到精通,SQL 临时表(37)

1、SQL 临时表

在SQL中,临时表(Temporary Table)是一种在会话或连接期间临时存储数据的表。它们对于存储中间结果、简化复杂查询以及提高性能非常有用。以下是一个创建和使用临时表的示例。

假设我们有一个名为 employees 的表,其中包含以下列:employee_id, first_name, last_name, department_id, 和 salary。我们想要创建一个临时表来存储某个特定部门的员工,并对这些员工进行一些分析。

1.1、创建并使用临时表的步骤

  1. 创建临时表
    首先,我们需要创建一个临时表来存储数据。临时表在不同的数据库系统中可能有所不同,但通常使用 CREATE TEMPORARY TABLE 语句。

  2. 插入数据
    接下来,我们将从原始表中插入数据到临时表中。

  3. 查询和分析数据
    最后,我们可以对临时表进行查询和分析。

示例代码

以下是一个完整的示例,展示了如何在MySQL中创建和使用临时表:

-- 1. 创建临时表
CREATE TEMPORARY TABLE temp_employees (employee_id INT,first_name VARCHAR(50),last_name VARCHAR(50),department_id INT,salary DECIMAL(10, 2)
);-- 2. 插入数据到临时表
-- 假设我们要插入部门ID为10的所有员工
INSERT INTO temp_employees (employee_id, first_name, last_name, department_id, salary)
SELECT employee_id, first_name, last_name, department_id, salary
FROM employees
WHERE department_id = 10;-- 3. 查询和分析数据
-- 例如,计算临时表中所有员工的平均工资
SELECT AVG(salary) AS average_salary
FROM temp_employees;-- 4. 临时表在会话结束时会自动删除,但你也可以手动删除它
-- DROP TEMPORARY TABLE temp_employees;

1.2、注意事项

  1. 临时表的生命周期

    • 在MySQL中,临时表在会话结束时会自动删除。
    • 在其他数据库系统(如SQL Server)中,临时表分为局部临时表(以 # 开头,会话结束时删除)和全局临时表(以 ## 开头,所有会话不再引用时删除)。
  2. 权限

    • 创建临时表通常需要 CREATE TEMPORARY TABLES 权限。
  3. 事务处理

    • 在某些数据库系统中,临时表可能不支持事务处理或具有特殊的行为。
  4. 命名冲突

    • 在同一会话中,不能创建两个同名的临时表。

通过创建和使用临时表,你可以有效地处理复杂的查询和数据操作,同时避免对原始数据的直接修改。

当然可以。以下是一些实际的使用SQL临时表的案例,这些案例展示了临时表在不同场景下的应用。

案例一:计算订单交付周期统计信息

假设有一个名为 pln_order_pool 的订单表,包含以下字段:create_time(订单创建时间)、reality_deliver_time(实际交付时间)、order_state(订单状态)等。我们需要计算所有状态为“finish”的订单的平均交付周期、最大交付周期和最小交付周期。

-- 计算每个订单的交付周期,并存储在临时表中
WITH order_lead_times AS (SELECT DATEDIFF(reality_deliver_time, create_time) AS leadTimeFROM pln_order_poolWHERE order_state = 'finish'
)
-- 从临时表中计算平均交付周期、最大交付周期和最小交付周期
SELECT AVG(leadTime) AS avgLeadTime,MAX(leadTime) AS maxLeadTime,MIN(leadTime) AS minLeadTime
FROM order_lead_times;

在这个案例中,我们使用了一个公共表表达式(CTE,也称为WITH子句)来创建一个临时表 order_lead_times,它存储了每个订单的交付周期。然后,我们从这个临时表中计算出了所需的统计信息。

案例二:计算计划完成率

假设有一个名为 plan 的表,用于记录某项目的计划数和实际完成数。该表包含以下字段:date(日期)、type(类型,‘计划’或’实出’)、num(数量)。我们需要计算某一天的计划完成率,即该天的实际完成数与计划数的比值。

-- 计算当天的计划总数,并存储在临时表中
WITH plan_nums AS (SELECT SUM(num) AS planNumsFROM planWHERE type = '计划' AND date = '2022-08-09'
),
-- 计算当天的实际完成总数,并存储在另一个临时表中
finish_nums AS (SELECT SUM(num) AS finishNumsFROM planWHERE type = '实出' AND date = '2022-08-09'
)
-- 从两个临时表中计算计划完成率
SELECT planNums,finishNums,IFNULL(ROUND(finishNums / planNums * 100, 2), 0) AS finishRate
FROM plan_nums, finish_nums;

在这个案例中,我们使用了两个CTE来分别创建存储当天计划总数和实际完成总数的临时表。然后,我们从这两个临时表中计算出了计划完成率。

案例三:数据转换和ETL过程

在ETL(提取、转换、加载)过程中,临时表常用于临时保存和转换数据。例如,我们可能需要从多个表中提取数据,进行转换和清洗,然后将结果加载到目标表中。在这个过程中,临时表可以作为一个中间存储点,用于存储转换后的数据。

-- 创建一个临时表来存储转换后的数据
CREATE TEMPORARY TABLE temp_transformed_data (column1 datatype,column2 datatype,...
);-- 从原始表中提取并转换数据,然后插入到临时表中
INSERT INTO temp_transformed_data (column1, column2, ...)
SELECT transform_function1(original_column1),transform_function2(original_column2),...
FROM original_table;-- 将转换后的数据从临时表加载到目标表中
INSERT INTO target_table (column1, column2, ...)
SELECT column1, column2, ...
FROM temp_transformed_data;-- 删除临时表(虽然它会在会话结束时自动删除)
DROP TEMPORARY TABLE temp_transformed_data;

请注意,具体的SQL语法和函数可能因数据库系统的不同而有所差异。上述案例是基于MySQL的语法编写的,但类似的概念和操作可以在其他数据库系统中实现。

相关文章:

mysql学习教程,从入门到精通,SQL 临时表(37)

1、SQL 临时表 在SQL中,临时表(Temporary Table)是一种在会话或连接期间临时存储数据的表。它们对于存储中间结果、简化复杂查询以及提高性能非常有用。以下是一个创建和使用临时表的示例。 假设我们有一个名为 employees 的表,…...

算法闭关修炼百题计划(四)

仅供个人复习 1.两数相加2.寻找峰值6.岛屿的最大面积3.最大数4.会议室5.最长连续序列6.寻找两个正序数组的中位数 1.两数相加 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请…...

头歌实践教学平台 大数据编程 实训答案(二)

第三阶段 Spark算子综合案例 Spark算子综合案例 - JAVA篇 第1关:WordCount - 词频统计 任务描述 本关任务:使用 Spark Core 知识编写一个词频统计程序。 相关知识 略 编程要求 请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下: …...

路由交换实验指南

案例 01:部署使用 eNSP 平台实验需求: 安装华为 eNSP 网络模拟平台打开 eNSP 平台,新建拓扑并绘制网络能够成功启动交换机、计算机设备 实验步骤: 安装华为 eNSP 网络模拟平台启动安装程序 配置安装内容 防护墙允许 eNSP 程序的…...

了解网页 blob 链接

blob 链接 自从 HTML5 提供了 video 标签,在网页中播放视频变得非常简单,只要在代码中插入一个 video 标签,再将 video 标签的 src 属性设置为视频的链接就可以了。由于 src 指向的是视频文件真实的地址,所以当我们通过浏览器的调…...

OpenGL笔记之事件驱动设计将相机控制类和应用程序类分离

OpenGL笔记之事件驱动设计将相机控制类和应用程序类分离 —— 2024-10-02 下午 bilibili赵新政老师的教程看后笔记 code review! 文章目录 OpenGL笔记之事件驱动设计将相机控制类和应用程序类分离1.代码图片2.分析3.UML4.代码 1.代码图片 运行 Mouse button 1 pressed at (1…...

低代码时代的企业信息化:规范与标准化的重要性

在当今数字化转型的浪潮中,企业的信息化建设正逐步向低代码平台倾斜。低代码不仅仅是简化开发过程,更是对企业内部流程、规范和标准化的深刻理解与应用。本文将探讨低代码在企业信息化中的重要性,特别是在运维和开发流程中的标准化&#xff0…...

理解无监督学习、无监督图像分割

系列文章目录 文章目录 系列文章目录一、无监督学习如何学习 能不能举一个非常具体的例子,带着运算过程的例子总结 二、在图像分割中呢,具体怎样实现无监督示例:使用自编码器和k-means进行无监督图像分割1. **数据准备**2. **构建自编码器**3…...

C语言— exec系列函数

exec系列函数 在C语言编程中,exec 系列函数用于在当前进程中执行一个新程序,从而替换当前进程的映像。这些函数不会返回,除非发生错误。exec 系列函数有多个变体,其中最常用的包括 execl, execle, execlp, execv, execve, execvp…...

命名管道Linux

管道是 毫不相关的进程进程间通信::命名管道 管道 首先自己要用用户层缓冲区,还得把用户层缓冲区拷贝到管道里,(从键盘里输入数据到用户层缓冲区里面),然后用户层缓冲区通过系统调用(write)写…...

【ios】---swift开发从入门到放弃

swift开发从入门到放弃 环境swift入门变量与常量类型安全和类型推断print函数字符串整数双精度布尔运算符数组集合set字典区间元祖可选类型循环语句条件语句switch语句函数枚举类型闭包数组方法结构体 环境 1.在App Store下载Xcode 2.新建项目(可以先使用这个&…...

【AUTOSAR 基础软件】PduR模块详解(通信路由)

文章包含了AUTOSAR基础软件(BSW)中PduR模块相关的内容详解。本文从AUTOSAR规范解析,ISOLAR-AB配置以及模块相关代码分析三个维度来帮读者清晰的认识和了解PduR这一基础软件模块。文中涉及的ISOLAR-AB配置以及模块相关代码都是依托于ETAS提供的…...

[控制理论]—差分变换法与双线性变换法的基本原理和代码实现

差分变换法与双线性变换法的基本原理和代码实现 1.差分变换法 差分变换法就是把微分方程中的导数用有限差分来近似等效,得到一个与原微分方程逼近的差分方程。 差分变换法包括后向差分与前向差分。 1.1 后向差分法 差分变换如下: d e ( t ) d t e…...

【JavaEE】——多线程常用类

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 引入: 一:Callable和FutureTask类 1:对比Runnable 2&#xff1a…...

Cilium-实战系列-(二)Cilium-Multi Networking-多网络

一、Cilium必要开启的功能 1、enable-multi-network 2、ipam模式选择:multi-pool 二、涉及的CRD资源 1、 ciliumpodippools.cilium.io *通过Cilium管理节点上的pod cidr.网络分为主网络和第二网络。 *主网络的 ciliumpodippools.cilium.io default根据配置文件默认生成的。 …...

springboot自动配置

自动配置的核心就在SpringBootApplication注解上,SpringBootApplication这个注解 底层包含了3个注解,分别是: SpringBootConfiguration ComponentScan EnableAutoConfiguration EnableAutoConfiguration这个注解才是自动配置的核心,它 封…...

mock数据,不使用springboot的单元测试

业务代码 package com.haier.configure.service.impl;import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.haier.common.util.RequestUtil; import com.haier.configure.entity.Langua…...

【pytorch】pytorch入门5:最大池化层(Pooling layers )

文章目录 前言一、定义概念 缩写二、参数三、最大池化操作四、使用步骤总结参考文献 前言 使用 B站小土堆课程 一、定义概念 缩写 池化(Pooling)是深度学习中常用的一种操作,用于降低卷积神经网络(CNN)或循环神经网…...

职场上的人情世故,你知多少?这五点一定要了解

职场是一个由人组成的复杂社交网络,人情世故在其中起着至关重要的作用。良好的人际关系可以帮助我们更好地融入团队,提升工作效率,甚至影响职业发展。在职场中,我们需要了解一些关键要素,以更好地处理人际关系&#xf…...

Python | Leetcode Python题解之第456题132模式

题目: 题解: class Solution:def find132pattern(self, nums: List[int]) -> bool:candidate_i, candidate_j [-nums[0]], [-nums[0]]for v in nums[1:]:idx_i bisect.bisect_right(candidate_i, -v)idx_j bisect.bisect_left(candidate_j, -v)if…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

【Oracle APEX开发小技巧12】

有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

2021-03-15 iview一些问题

1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

大数据学习(132)-HIve数据分析

​​​​🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言&#x1f4…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...