MERGE là một câu lệnh DML (ngôn ngữ thao tác dữ liệu).
Còn được gọi là UPSERT (Update-Insert).
Nó cố gắng khớp nguồn (bảng / chế độ xem / truy vấn) với một đích (bảng / chế độ xem có thể cập nhật) dựa trên điều kiện xác định của bạn và sau đó dựa trên kết quả phù hợp, nó chèn / cập nhật / xóa hàng vào / trong / của bảng đích.
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 |
+---+----+
THAM GIA MERGE là một thuật toán kết hợp (ví dụ:HASH JOIN hoặc NESTED LOOPS).
Nó dựa trên việc sắp xếp trước tiên cả hai tập dữ liệu theo các điều kiện kết hợp (có thể đã được sắp xếp do tồn tại chỉ mục) và sau đó duyệt qua các tập dữ liệu đã sắp xếp và tìm các kết quả phù hợp.
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)
Trong SQL Server, khóa chính ngụ ý cấu trúc chỉ mục được phân cụm có nghĩa là bảng được lưu trữ dưới dạng B-Tree, được sắp xếp theo khóa chính.