Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Ist Merge und Merge Join in SQL Server gleich?

VEREINIGUNG ist eine DML-Anweisung (Datenmanipulationssprache).
Auch UPSERT (Update-Insert) genannt.
Es versucht, die Quelle (Tabelle / Ansicht / Abfrage) mit einem Ziel (Tabelle / aktualisierbare Ansicht) abzugleichen, basierend auf Ihre definierten Bedingungen und fügt dann basierend auf den übereinstimmenden Ergebnissen Zeilen in/in/aus der Zieltabelle ein/aktualisiert/löscht sie.
MERGE (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 |
+---+----+

VERBINDEN VERBINDEN ist ein Join-Algorithmus (z. B. HASH JOIN oder NESTED LOOPS).
Er basiert darauf, dass zuerst beide Datensätze gemäß den Join-Bedingungen sortiert werden (möglicherweise bereits sortiert, weil ein Index vorhanden ist) und dann die sortierten Datensätze durchlaufen und Übereinstimmungen gefunden werden.

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)

In SQL Server impliziert ein Primärschlüssel eine gruppierte Indexstruktur, was bedeutet, dass die Tabelle als B-Baum gespeichert wird, sortiert nach dem Primärschlüssel.

Zusammenführungsverknüpfungen verstehen