sql >> Database >  >> RDS >> Sqlserver

Is samenvoegen en samenvoegen hetzelfde in SQL Server?

MERGE is een DML-instructie (taal voor gegevensmanipulatie).
Ook wel UPSERT (Update-Insert) genoemd.
Het probeert de bron (tabel/weergave/query) te matchen met een doel (tabel/bijwerkbare weergave) op basis van uw gedefinieerde voorwaarden en vervolgens op basis van de overeenkomende resultaten rijen invoegen/bijwerken/verwijderen naar/in/van de doeltabel.
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 |
+---+----+

MEER AANMELDEN is een join-algoritme (bijv. HASH JOIN of NESTED LOOPS).
Het is gebaseerd op het eerst sorteren van beide datasets volgens de join-voorwaarden (misschien al gesorteerd vanwege een bestaande index) en vervolgens door de gesorteerde datasets te bladeren en overeenkomsten te vinden.

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 impliceert een primaire sleutel een geclusterde indexstructuur, wat betekent dat de tabel wordt opgeslagen als een B-Tree, gesorteerd op de primaire sleutel.

Inzicht in samenvoeging van joins




  1. Leden rangschikken alleen gebieden

  2. MySQL:Snel overzicht van de soorten joins

  3. EF Core 2.0 Identity - Navigatie-eigenschappen toevoegen

  4. Toegang tot MySQL-poorten beperken?