SQL Server 中的合并和合并联接相同吗?

2024-02-05

SQL Server 中的合并和合并联接有什么区别?


MERGE是一种DML语句(数据操作语言)。
也称为 UPSERT(更新-插入)。
它尝试根据您定义的条件将源(表/视图/查询)与目标(表/可更新视图)匹配,然后根据匹配结果向目标表中插入/更新/删除行。
合并 (Transact-SQL) https://msdn.microsoft.com/en-us/library/bb510625.aspx

create table src (i int, j int);
create table trg (i int, j int);

insert into src values (1,1),(2,2),(3,3);
insert into trg values (2,20),(3,30),(4,40);

merge into  trg
using       src
on          src.i = trg.i
when not matched by target then insert (i,j) values (src.i,src.j)
when not matched by source then update set trg.j = -1
when matched then update set trg.j = trg.j + src.j
;

select * from trg order by i

+---+----+
| i | j  |
+---+----+
| 1 | 1  |
+---+----+
| 2 | 22 |
+---+----+
| 3 | 33 |
+---+----+
| 4 | -1 |
+---+----+

合并连接是一种连接算法(例如 HASH JOIN 或 NESTED LOOPS)。
它首先根据连接条件对两个数据集进行排序(可能由于存在索引而已排序),然后遍历排序后的数据集并查找匹配项。

create table t1 (i int)
create table t2 (i int)

select * from t1 join t2 on t1.i = t2.i option (merge join)
create table t1 (i int primary key)
create table t2 (i int primary key)

select * from t1 join t2 on t1.i = t2.i option (merge join)

在 SQL Server 中,主键意味着聚集索引结构,这意味着表存储为 B 树,按主键排序。

了解合并连接 https://technet.microsoft.com/en-us/library/ms190967(v=sql.105).aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server 中的合并和合并联接相同吗? 的相关文章

  • 更好地理解 SQL Server 中的架构

    就像标题一样 我还是一个SQLServer菜鸟 当我创建表 Mytable 时 数据库中显示 dbo Mytable 但有人能让我更好地理解模式吗 另外 在 Server 2008 TSQL 一书中 Itzik 说 在你的数据库中 表属于模
  • 如何拥有引用另一个表的检查约束?

    我在 SQL Server 2008 数据库中有以下表 tblItem 其中有一个ItemID field 好项目 它还有一个 ItemID 字段 并且有一个指向 tblItem 的外键 tblBadItem 它也有一个 ItemID 字段
  • WHERE NOT EXIST 附近的语法错误

    我在堆栈中搜索 但没有一个达到最终答案 我的查询是这样的 INSERT INTO user username frequence autoSend VALUES feri2 3 1 WHERE NOT EXISTS SELECT FROM
  • 更改mysql数据库表中的日期格式

    大家早上好 只是一个简单的问题 在我现有的 MySql 数据库中 我几乎没有包含日期 的列 目前这些是年 月 日格式 但现在我需要将其全部更改为年 月 日格式 我试过了select date format curdate d m Y 但它不
  • ORA-12728: 正则表达式中的范围无效

    我想检查表中是否插入了有效的电话号码 所以我的触发代码在这里 select start index into mob index from gmarg mobile operators where START INDEX substr ne
  • SQL查询查找具有特定数量关联的行

    使用 Postgres 我有一个架构conversations and conversationUsers Each conversation有很多conversationUsers 我希望能够找到具有确切指定数量的对话conversati
  • 通过 C# SqlCommand 执行合并语句不起作用

    我正在第一次尝试使用临时表和MERGE语句通过更新 SQL 表SqlCommandC 中的对象 我正在开发的程序旨在首先将大量记录 最多 20k 导出到 Excel 电子表格中 然后 用户可以搜索并替换特定值 并根据需要更新任意多记录中的任
  • 支持 >65k 行的 Excel VBA SQL 驱动程序

    在 Excel 2010 中通过 VBA 查询 Excel 数据时 我遇到一个有趣的问题 我正在使用这些驱动程序连接到 xls 或 xls x m 文件 Sub OpenCon ByRef theConn As Connection ByV
  • Ruby ActiveRecord 和 sql 元组支持

    ActiveRecord 是否支持 where 子句中的元组 假设底层数据库支持 结果 where 子句看起来像这样 where name address in John 123 Main St I tried Person where n
  • 如何使用一个命令删除 SQL 数据库中的所有索引?

    那么 如何通过一条命令删除 SQL 数据库中的所有索引呢 我有这个命令可以获取所有 20 个左右的 drop 语句 但是如何从这个 结果集 运行所有这些 drop 语句呢 select from vw drop idnex 给我相同列表的另
  • 向带有检查约束 SQL 的表添加列

    我想向表中添加一列 然后添加一个检查约束以确保其大于 0 我似乎无法让它在 oracle sl Developer 中运行 Alter TABLE store101 add column Base salary Number 7 2 con
  • MySQL“列计数与第 1 行的值计数不匹配”是什么意思

    这是我收到的消息 ER WRONG VALUE COUNT ON ROW 列计数与第 1 行的值计数不匹配 这是我的全部代码 我的错误在哪里 DROP TABLE student CREATE TABLE employee emp id I
  • 是否可以从子查询中获取多个值?

    有没有办法让子查询在oracle db中返回多列 我知道这个特定的sql会导致错误 但它很好地总结了我想要的 select a x select b y b z from b where b v a v from a 我想要这样的结果 a
  • 计算2个日期之间每个日期的记录数

    我必须创建一个查询来返回多轴图表的结果 我需要计算为 2 个日期之间的每个日期创建的 ID 数量 我试过这个 DECLARE StartDate datetime2 7 11 1 2020 EndDate datetime2 7 2 22
  • 随着时间的推移累积(不重叠)——技术?

    我正在尝试找到一种更好的方法来制作水晶报告 其他人的 按组添加不重叠的时间 这显然是一个古老的问题 有没有一种技术可以得到 调整每条记录的 开始 结束 时间 以消除共同 重叠时间 亚组内 使用直接 SQL 尽管我发现我可以执行 CTE 假设
  • PostgreSQL函数中sql语言和plpgsql语言的区别

    我很新数据库开发所以我对下面的例子有一些疑问 函数 f1 语言 SQL create or replace function f1 istr varchar returns text as select hello varchar istr
  • 如何在 SQL Server 2012 中选择除一列之外的所有列? [复制]

    这个问题在这里已经有答案了 有没有一种方法可以选择所有列 但只选择我不想选择的特定列 我的意思是有时我会遇到这样的问题 表有数百个字段 而我只需要删除一个字段 我需要重写所有列吗 有什么窍门吗 喜欢select
  • 基本的多对多sql选择查询

    我认为这应该很容易 但它却在逃避我 我的帐户和帐户组之间存在多对多关系 一个帐户可以位于零个或多个组中 因此我使用标准连接表 Accounts ID BankName AcctNumber Balance AccountGroups ID
  • 使用函数的 SQL 查询 - 如何获取列表的最大计数

    如何查询 MAXIMUM COUNT 交易次数 我的代码如下 SELECT customer id COUNT customer id FROM rental GROUP BY customer id HAVING MAX COUNT cu
  • SQL Server:如果存在会大大减慢查询速度

    正在使用SQL Server 2012 我找到了一些关于查询优化的主题 并将 EXISTS 与 COUNT 进行比较 但我找不到这个确切的问题 我有一个看起来像这样的查询 select from tblAccount as acc join

随机推荐

  • pip 下载而不执行 setup.py

    如何下载发行版 可能是 sdist 而不可能执行setup py文件 可能包含恶意代码 我不想递归获取依赖项 只想下载指定发行版的一个文件 尝试无效 pip download no deps mydist 这是一个可重现的示例 演示了set
  • 如何向我在 Android 中用作背景的可绘制对象添加圆角?

    我有一个特定的可绘制对象 在我的应用程序中用作背景 它不是纯色 现在我想给这个可绘制对象添加圆角 我只发现圆角可用于具有渐变或纯色作为背景的形状 但没有其他可绘制的形状 是否有另一种简单的方法向可绘制对象添加圆角 Use AQuery使可绘
  • 桶太多,直方图聚合失败

    我有一个对 elastic 的查询 其中包含总共 8 个嵌套聚合 所有聚合都是term聚合 除了一个聚合histogram聚合 如果我删除该直方图聚合 查询将完美运行 但对于直方图聚合 它会抛出这个特定的错误 此聚合创建了太多存储桶 100
  • 为任何 CMS 系统创建 sitemap.xml 的最有效的性能方法是什么?

    我们想要在 CMS 系统中实现 sitemap xml 功能 我们的开发人员内部有一些争论 认为此功能会影响性能 因为每次内容发生更改时 都需要创建网站的完整链接列表并将其放置在 sitemap xml 中 这个想法是 每次编辑或添加公共查
  • Android Studio 中的 APK 分析器是什么以及如何充分利用它?

    Android Studio 包含一个 APK 分析器 可在顶部菜单中找到 Build gt Analyze APK 它是什么以及如何充分利用它 构建过程完成后 APK 分析器可以提供有关 APK 文件组成的详细信息 使用 APK 分析器的
  • Python 将私钥转换为 RSA 密钥

    我有一个具有以下格式的私钥 BEGIN ENCRYPTED PRIVATE KEY MIIE6TAbBgkqhki END ENCRYPTED PRIVATE KEY 如何将其转换为 RSA 格式的密钥 BEGIN RSA PRIVATE
  • C++ 在后台有一个函数重复

    我正在使用微软视觉表达 我已查看已接受的答案this https stackoverflow com questions 10807681 loop every 10 second问题 它似乎没有做我想做的事 这是对我来说每秒重复的函数 d
  • 为什么这个偶数函数的 FFT 不是真实的?

    因此 在 iPython 中 我运行以下命令 In 1 from pylab import In 2 x np array 4 3 2 1 0 1 2 3 4 In 3 rfft x Out 3 array 20 00000000 0 j
  • 层支持的 NSView 性能,直接在 CALayer.drawInContext 中渲染:

    我有许多层支持的视图包含在NSScrollview and am 主要关注滚动性能 The documentView和更高层是受层支持的 因此它们的子视图也是受层支持的 以下是显示 渲染代码可以放置的三个自然位置 覆盖NSView want
  • 对 Buffer (Node.js) 内容执行 .replace() ?

    这是一个相当新的问题 但我还没有通过 Google SO Etc 找到任何可靠的答案 如果缓冲区中有内容 运行缓冲区的最佳模式是什么 replace 关于那个内容 您是否只是简单地提取内容 toString run replace 然后把它
  • Access DB - 在一个字段中保存文件位置(完整)链接/路径,在其他字段中保存文件名(两者或其中之一应可单击以打开文件)

    这是我的第一篇文章 我是 MS Access 新手 没有编码经验 我有一个 Access 数据库 其中有一个表调用附件 字段为 保存路径 和 文件名 两者都是超链接数据类型 由于 MS Access 附件选项下有 2GB 的限制 因此我想保
  • Jboss AS7 - 如何为外部库创建 module.xml?

    我有多个使用多个库的 ear 项目 所以我需要使它们变得通用并将它们添加到模块中 那么 当我需要为每个库创建 module xml 时 是否有任何简单的方法来创建 module xml 我还需要在 module xml 中定义每个库的依赖关
  • 如何在 Rabbit.js 上创建 REP/REQ

    我已经在 Net 上使用 RabbitMQ 一段时间了 并且没有遇到太大的问题 现在我正在使用 node js 迁移到rabbit js 但我对它不太熟悉 rabbit js 的文档有限 我只知道基本的 PUSH PULL 或 PUB SU
  • 如何在C#中使组合框在鼠标悬停时自动展开并在鼠标离开组合框时关闭? [复制]

    这个问题在这里已经有答案了 我有一个窗口窗体 在该窗口窗体中我有一个组合框 我在组合框中预定义了项目添加 删除和删除 我想让组合框在鼠标悬停时自动展开 我怎样才能做到这一点 我注意到自动展开代码应该在组合框的鼠标悬停事件中给出 像这样 pr
  • 为什么我的平方函数不运行?

    我决定编写一个程序来计算数字的平方只是为了好玩 使用在线编译器 我输入了代码 据我所知 没有错误 它不会运行它只会有一个空白的控制台条目 我的代码 import math def square number raw input Please
  • php:自动缩进整个代码?

    是否有任何 netbeans eclipse 的软件 插件可以在插入后自动缩进整个代码 当我按下 ENTER 以获得新功能时 不仅仅是缩进 我想粘贴一个没有缩进的代码 它会自动缩进所有内容 因为它可以识别使用的语言 应该可以节省很多时间 在
  • 如何在 Google 电子表格中减去两组值?

    我有两组值A A and B B 如何在它们之间进行设置差异 最好使用公式 即从A A不存在于B B 这样的公式可以做到这一点 并且速度相当快 filter A A countif B B A A 0
  • 在 View(CakePHP) 中,获取当前控制器的正确方法?

    在视图中 我可以通过使用来采取行动 this gt action 但是 我无法通过以下方式获取控制器名称 this gt controller 在视图中获取当前控制器的正确方法是什么 Use this gt params controlle
  • 共享内存编程中的 shm_open 和 ftruncate()

    我想创建一个共享内存对象并将其截断为特定大小 SHMSIZE 定义为 512 MODE 设置为 S IRUSR S IWUSR S IWGRP S IRGRP S IWOTH S IROTH 这是我的代码 char shm name Sha
  • SQL Server 中的合并和合并联接相同吗?

    SQL Server 中的合并和合并联接有什么区别 MERGE是一种DML语句 数据操作语言 也称为 UPSERT 更新 插入 它尝试根据您定义的条件将源 表 视图 查询 与目标 表 可更新视图 匹配 然后根据匹配结果向目标表中插入 更新