oracle中merge into用法及实例解析

Oracle中MERGE INTO用法及实例解析

MERGE INTO介绍

MERGE INTO用于将一台表的数据插入到另一个表中,可以根据条件进行更新或插入操作。

MERGE INTO需要指定源表和目标表,并且在ON子句中指定源表和目标表的关联条件,然后我们可以在WHEN MATCHED或WHEN NOT MATCHED子句中指定更新或插入操作。

MERGE INTO语法

MERGE INTO [目标表名] T1
USING [源表名] T2
ON ([条件])
WHEN MATCHED THEN
    UPDATE SET T1.col1 = T2.col1, T1.col2 = T2.col2, ...
WHEN NOT MATCHED THEN
    INSERT (T1.col1, T1.col2, ...)VALUES (T2.col1, T2.col2, ...);

MERGE INTO实例解析

示例一

现有两个表,一个表示学生信息,一个表示学生成绩信息,需要将学生成绩信息更新到学生信息表中。

学生信息表student:

学生ID 姓名 年龄 班级
1 张三 18 1
2 李四 17 1
3 王五 18 2

学生成绩表score:

学生ID 语文成绩 数学成绩 英语成绩
1 90 85 95
2 95 80 90
3 85 90 95
4 80 75 85

我们需要将学生成绩更新到学生信息表中,如果学生信息表中有对应学生ID的记录,则更新该记录的成绩信息;如果学生信息表中没有对应学生ID的记录,则插入一条新记录。

MERGE INTO student T1
USING score T2
ON (T1.学生ID = T2.学生ID)
WHEN MATCHED THEN
    UPDATE SET T1.语文成绩 = T2.语文成绩,
               T1.数学成绩 = T2.数学成绩,
               T1.英语成绩 = T2.英语成绩
WHEN NOT MATCHED THEN
    INSERT (T1.学生ID, T1.语文成绩, T1.数学成绩, T1.英语成绩)
    VALUES (T2.学生ID, T2.语文成绩, T2.数学成绩, T2.英语成绩);

执行上面的SQL语句后,可以得到新的学生信息表student:

学生ID 姓名 年龄 班级 语文成绩 数学成绩 英语成绩
1 张三 18 1 90 85 95
2 李四 17 1 95 80 90
3 王五 18 2 85 90 95
4 NULL NULL NULL 80 75 85

在学生信息表中新增了一条学生ID为4的记录。

示例二

现有两个表,一个记录售卖记录,一个记录退货记录,需要根据销售和退货记录来更新库存表中的数据。

售卖记录表sales:

产品ID 销售数量 价格
1 100 10
2 200 20
3 300 30

退货记录表returns:

产品ID 退货数量
1 20
2 40

库存表inventory:

产品ID 数量 价格
1 80 10
2 160 20
3 300 30

需要根据销售和退货记录来更新库存表中的数据,如果产品ID在库存表中不存在,则插入一条新纪录。

MERGE INTO inventory T
USING (
  SELECT 产品ID, SUM(销售数量-退货数量) AS 数量, 价格 
  FROM (
    SELECT 产品ID, 销售数量, 价格, 0 AS 退货数量 FROM sales
    UNION ALL
    SELECT 产品ID, 0 AS 销售数量, 0-退货数量 AS 价格 FROM returns
  ) T
  GROUP BY 产品ID, 价格
) S
ON (T.产品ID = S.产品ID AND T.价格 = S.价格)
WHEN MATCHED THEN 
  UPDATE SET T.数量 = T.数量 + S.数量
WHEN NOT MATCHED THEN 
  INSERT (T.产品ID, T.数量, T.价格) VALUES (S.产品ID, S.数量, S.价格);

执行上面的SQL语句后,可以得到新的库存表inventory:

产品ID 数量 价格
1 60 10
2 120 20
3 300 30

更新了产品ID为1和2的数量信息,并新增了一条产品ID为3的记录。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:oracle中merge into用法及实例解析 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • mysql oracle和sqlserver分页查询实例解析

    MySQL、Oracle和SQL Server分页查询实例解析 什么是分页查询 分页查询是在一张数据表中检索指定数量的数据,并以固定的分页大小显示在前端界面上。它通常被运用在数据量较大、无法一次性全部显示的情况下,将数据划分成若干页进行显示,有利于用户的数据浏览和页面渲染的负载均衡。 分页查询的基本语法 针对不同的数据库,分页查询的语法和方法会有所不同。然而…

    Oracle 2023年5月16日
    00
  • Oracle中备份表的简单sql命令语句

    备份表在Oracle中是非常重要的。当数据丢失或篡改时,备份可以起到重要的作用。下面是备份表的简单 SQL 命令: 1.使用CREATE TABLE AS语句备份表 在 Oracle 中,CREATE TABLE AS 语句允许您创建一个新表,并从现有表复制数据。您可以使用此命令备份表,如下所示: CREATE TABLE new_table AS SELE…

    Oracle 2023年5月16日
    00
  • Oracle联机日志文件与归档文件详细介绍

    想要了解Oracle联机日志文件和归档文件,需要先了解Oracle数据库的日志模式和归档模式。 Oracle数据库的日志模式有两种:非归档模式和归档模式。在非归档模式下,正常情况下的联机日志文件不被自动备份和保存,而会被不断的覆盖,因此只有最后一份日志文件可以被使用。一旦数据库出现故障,由于日志文件没有被备份,数据可能会永久性的丢失。而在归档模式下,每次使用…

    Oracle 2023年5月16日
    00
  • 深入浅析Oracle数据库管理之创建和删除数据库

    深入浅析Oracle数据库管理之创建和删除数据库 在Oracle数据库管理中,创建和删除数据库是非常基础且重要的操作。本文将详细讲解这两项操作的完整攻略。 创建Oracle数据库 环境准备 在进行创建Oracle数据库之前,需要确保以下环境已准备就绪: Oracle数据库安装文件 Oracle数据库实例的管理账户 数据库所需的参数配置文件 步骤说明 打开终端…

    Oracle 2023年5月16日
    00
  • oracle删除表字段和oracle表增加字段

    下面是关于Oracle删除表字段和增加表字段的完整攻略: Oracle删除表字段: 在Oracle数据库中删除表字段的语法为: ALTER TABLE table_name DROP COLUMN column_name; 其中,table_name为要删除字段的表名,column_name为要删除的字段名。 例如,我们要删除表EMPLOYEE中的AGE字段…

    Oracle 2023年5月16日
    00
  • oracle 11g下载、安装、使用图文教程

    下面我详细讲解“oracle 11g下载、安装、使用图文教程”的攻略。 下载 首先,需要到Oracle官网下载Oracle Database 11g Release 2。 选择你需要的版本,这里以Oracle Database 11g Release 2 for Windows x64为例。 安装 解压下载后的压缩包。 运行setup.exe。 选择安装类型…

    Oracle 2023年5月16日
    00
  • 使用PLSQL远程连接Oracle数据库的方法(内网穿透)

    下面我来为你详细讲解使用PLSQL远程连接Oracle数据库的方法(内网穿透)的完整攻略。 什么是PL/SQL PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库的过程编程语言,用于编写存储过程、触发器、函数等可重用的代码,旨在提高数据库应用程序的性能、可维护性和可扩展性。 什么是内…

    Oracle 2023年5月16日
    00
  • Oracle 11g实现安全加固的完整步骤

    以下是详细讲解“Oracle 11g实现安全加固的完整步骤”的完整攻略。 1. 开启安全加固特性 Oracle 11g的安全加固特性需要手动开启。可以通过以下步骤开启: 在 Oracle 数据库实例上执行以下命令,启用 QUERY_REWRITE 功能 ALTER SYSTEM SET QUERY_REWRITE_ENABLED=TRUE SCOPE=SPF…

    Oracle 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部