ОБЕДИНИ е DML израз (език за манипулиране на данни).
Нарича се още UPSERT (Update-Insert).
Той се опитва да съпостави източника (таблица/изглед/заявка) с цел (таблица/изглед с възможност за актуализиране) въз основа на определени от вас условия и след това въз основа на съответстващите резултати вмъква/актуализира/изтрива редове в/в/от целевата таблица.
ОБЛИВАНЕ (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 |
+---+----+
ОБЕДИНЯВАНЕ С ОБЕДИВАНЕ е алгоритъм за свързване (напр. 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-Tree, сортирана по първичния ключ.
Разбиране на обединяванията при сливане