首页 > 数据库 >SQL 高级语法:MERGE INTO

SQL 高级语法:MERGE INTO

时间:2024-09-15 17:49:17浏览次数:3  
标签:INTO ID MERGE SQL Age TargetTable SourceTable

目录

前言

示例

总结

最后


前言

在数据库操作中,经常需要根据现有数据更新表或插入新记录。传统上,这通常涉及到使用 UPDATEINSERT 语句来分别完成这两个任务。然而,当需要在同一操作中结合这两种行为时,代码就会变得复杂且难以维护。

为了解决这个问题,SQL 提供了 MERGE INTO 语句,它可以有效地在单个操作中实现更新和插入。

本文将详细介绍 MERGE INTO 的使用方法,并通过一个实例来展示其强大之处。

示例

假设我们有两个表:TargetTableSourceTableTargetTable 存储了我们需要保持最新的数据,而 SourceTable 包含了最新的数据记录。我们的目标是将 SourceTable 中的数据合并到 TargetTable 中,如果记录已存在,则更新;如果不存在,则插入新记录。

首先,让我们创建这两个表,并填充一些示例数据:

CREATE TABLE TargetTable (
    ID INT PRIMARY KEY,
    Name NVARCHAR(50),
    Age INT
);
​
CREATE TABLE SourceTable (
    ID INT,
    Name NVARCHAR(50),
    Age INT
);
​
-- 插入示例数据
INSERT INTO TargetTable VALUES (1, 'Alice', 30);
INSERT INTO TargetTable VALUES (2, 'Bob', 25);
​
INSERT INTO SourceTable VALUES (1, 'Alice', 31); -- 更新
INSERT INTO SourceTable VALUES (3, 'Charlie', 28); -- 插入

接下来,使用 MERGE INTO 语句来同步这两个表:

MERGE INTO TargetTable AS T
USING SourceTable AS S
ON T.ID = S.ID
WHEN MATCHED THEN
    UPDATE SET T.Name = S.Name, T.Age = S.Age
WHEN NOT MATCHED THEN
    INSERT (ID, Name, Age)
    VALUES (S.ID, S.Name, S.Age);

执行上述 MERGE INTO 语句后,TargetTable 将会被更新如下:

SELECT * FROM TargetTable;

输出结果应该显示 ID=1 的记录已经被更新,年龄变为 31,并且新增了一条 ID=3 的记录。

总结

通过 MERGE INTO 语句,我们可以在一个步骤中实现对数据的更新和插入,这极大地简化了数据同步的过程,并提高了代码的可读性和可维护性。对于需要频繁更新数据库的场景,MERGE INTO 提供了一个高效且简洁的解决方案。

希望本文能帮助你更好地理解和运用这一强大的 SQL 功能。

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!优秀是一种习惯,欢迎大家留言学习!

标签:INTO,ID,MERGE,SQL,Age,TargetTable,SourceTable
From: https://blog.csdn.net/u012573563/article/details/142261569

相关文章

  • mysql数据怎么导入到帝国cms
    将MySQL数据导入到帝国CMS中通常有两种情况:一种是从现有的MySQL数据库导入数据到帝国CMS的新建数据库中,另一种是从帝国CMS的备份文件恢复数据到现有的帝国CMS数据库中。以下是针对这两种情况的具体步骤:从现有MySQL数据库导入数据到帝国CMS方法一:手动迁移数据导出现有数据库:......
  • VPS Ubuntu22.04 安装WordPress 搭建网站 详细全流程(基于Apache+MySQL+PHP)(二)
    VPSUbuntu22.04安装WordPress搭建网站详细全流程(基于Apache+MySQL+PHP)(二)简介在网站处理和网络管理方面,WordPress是用户可以采取的最明智的选择。由于WordPress的巨大优势,它在网页设计师中广受欢迎。统计数据显示,访问量最大的1000个网站中约有35%是WordPress。......
  • MySQL 大表拆分
    概述在实际工作中,在关系数据库(MySQL、PostgreSQL)的单表数据量上亿后,往往会出现查询和分析变慢甚至无法执行统计分析的情况。这时就需要将大表拆分为多个小表,将小表分布在多个数据库上,形成一个数据库集群。这样的话,一条SQL统计语句就可以在多台服务器上并发执行,然后将执行结果汇......
  • MyBatis系统学习(三)——动态SQL
    MyBatis是一款优秀的持久层框架,它通过XML或注解方式将SQL语句与Java对象映射起来。动态SQL是MyBatis中非常强大的功能之一,能够根据不同的条件动态生成SQL语句。动态SQL通过各种标签来灵活生成SQL,从而避免了在代码中拼接SQL的复杂性和冗余性。接下来,我们会......
  • 【MySQL】基础部分——DDL,DML,DQL,DCL,函数,约数,多表查询,事务
    个人学习记录,供以后回顾和复习ubuntu下安装使用1.DDL,DML,DQL,DCLDDL数据库表DML增改删DQL条件查询分组查询排序查询分页查询DCL管理用户权限控制2.函数字符串函数数值函数日期函数流程函数3.约束4.多表查询多表关系内连接外连接自连接联合查询union子查询标量子查询......
  • 商混erp系统多接口sql注入漏洞复现
    0x01漏洞描述:        商混ERP系统是一种针对混凝土行业开发的综合性企业资源规划(ERP)系统。它集成了生产、销售、采购、财务等各个方面的功能,为混凝土生产企业提供了一个全面、高效的数字化管理平台。在Operater_Action.aspx,StockreceiveEdit.aspx接口中存在sql注入,高......
  • mysql笔记8(多表查询)
    文章目录1.union联合查询可能会用到去重操作2.innerjoin内连接3.leftjoin左连接4.rightjoin右连接5.crossjoin交叉连接6.naturaljoin自然连接naturalleftjoin自然左连接naturalrightjoin自然右连接自然连接的两张表没有同名字段怎么办?7.using......
  • PostgreSQL数据库大版本升级
    简介该文档中描述的方式针对源码安装的数据进行升级操作过程1.说明 a.当前数据库版本为11.22,升级后为15.82.备份原数据库3.安装目标版本[root@olinux73_modelsws]#tar-zxfpostgresql-15.8.tar.gz[root@olinux73_modelsws]#cdpostgresql-15.8/[root@olinux73......
  • Mysql 面试题总结
    1.Mysql数据库,隔离级别有哪几个?在MySQL数据库中,事务的隔离级别决定了一个事务在执行期间对其他事务可见的数据变化情况。MySQL支持SQL标准定义的四种隔离级别,从低到高依次为:读未提交(READUNCOMMITTED)在该隔离级别下,事务中的修改即使没有提交,对其他事务也是可见的。......
  • SQL查询技巧:深入解析学生选课系统数据库
            在大学的学生选课系统中,数据库的管理和查询是日常操作中的重要部分。本文通过一系列具体的SQL查询示例,深入解析如何高效地从数据库中获取所需信息,包括学生选课情况、成绩分析、教师课程管理等。系统数据库结构首先,我们有一个包含以下表的数据库:course -存......