Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

La fusion et la fusion sont-elles identiques dans SQL Server ?

FUSIONNER est une instruction DML (langage de manipulation de données).
Aussi appelé UPSERT (Update-Insert).
Il essaie de faire correspondre la source (table/vue/requête) à une cible (table/vue modifiable) en fonction de vos conditions définies, puis en fonction des résultats correspondants, il insère/met à jour/supprime des lignes dans/dans/de la table cible.
FUSION (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 |
+---+----+

FUSIONNER JOINDRE est un algorithme de jointure (par exemple, HASH JOIN ou NESTED LOOPS).
Il est basé sur le premier tri des deux ensembles de données en fonction des conditions de jointure (peut-être déjà triés en raison de l'existence d'un index), puis sur la traversée des ensembles de données triés et la recherche de correspondances.

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)

Dans SQL Server, une clé primaire implique une structure d'index en cluster, ce qui signifie que la table est stockée sous forme d'arborescence B, triée par clé primaire.

Comprendre les jointures par fusion