sql >> Base de Datos >  >> RDS >> Sqlserver

¿Merge y Merge se unen igual en SQL Server?

COMBINAR es una declaración DML (lenguaje de manipulación de datos).
También llamado UPSERT (Actualización-Inserción).
Intenta hacer coincidir el origen (tabla/vista/consulta) con un destino (tabla/vista actualizable) en función de sus condiciones definidas y luego, en función de los resultados coincidentes, inserta/actualiza/elimina filas en/en/de la tabla de destino.
COMBINAR (Transact-SQL)

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 |
+---+----+

COMBINAR UNIRSE es un algoritmo de combinación (por ejemplo, HASH JOIN o NESTED LOOPS).
Se basa en clasificar primero ambos conjuntos de datos de acuerdo con las condiciones de combinación (tal vez ya ordenados debido a la existencia de un índice) y luego recorrer los conjuntos de datos ordenados y encontrar coincidencias.

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)

En SQL Server, una clave principal implica una estructura de índice agrupado, lo que significa que la tabla se almacena como un árbol B, ordenado por la clave principal.

Comprensión de las uniones de combinación