MERGE – Lệnh trộn dữ liệu
Nội dung
1. Mô tả
1.1 Lệnh MERGE
- Lệnh MERGE dùng để hỗ trợ kết hợp thực thi nhiều thao tác cập nhật dữ liệu một cách hiệu quả vào một thao tác đơn:
– Cho phép thực hiện INSERT/ UPDATE/ DELETE sử dụng một câu lệnh duy nhất.
– Nâng cao hiệu năng truy vấn. - Lưu ý khi sử dụng MERGE:
– Lệnh MERGE yêu cầu phải có dấu ; cuối câu lệnh, nếu không sẽ gây lỗi Error do không xác định được điểm kết thúc câu lệnh.
– Phải chỉ định ít nhất 1 trong 3 mệnh đề MATCH trong lệnh MERGE, thứ tự có thể tùy ý, tuy nhiên 1 cột không thể được cập nhật nhiều hơn 1 lần trong cùng mệnh đề MATCH.
1.2 Từ khóa OUTPUT
- Từ khóa OUTPUT sử dụng trong các câu lệnh INSERT, UPDATE, DELETE để kết xuất dữ liệu liên quan đến lệnh (ngay sau khi thực hiện) ra màn hình hoặc bảng.
2. Cú pháp
2.1 Lệnh MERGE
MERGE Bảng_đích
USING Bảng_nguồn
ON Điều_kiện_merge
WHEN MATCHED THEN INSERT|UPDATE|DELETE Xử_lý_khi_so_khớp_điều_kiện_merge
WHEN NOT MATCHED THEN INSERT|UPDATE|DELETE Xử_lý_khi_không_so_khớp_điều_kiện_merge;
2.2 Từ khóa OUTPUT
- INSERT: sử dụng từ khóa inserted để tham chiếu đến các cột có dữ liệu được thêm mới
INSERT Tên bảng
OUTPUT inserted.Tên_cột
[INTO bảng_2 VALUES(Danh_sách_giá_trị) SELECT...]
--Bảng 2 là bảng nhận dữ liệu được output
- UPDATE: sử dụng từ khóa inserted (dữ liệu sau khi sửa) và deleted (dữ liệu trước khi sửa)
UPDATE Tên_bảng
SET
OUTPUT inserted.Tên_cột, deleted.Tên_cột
[INTO Bảng_2
WHERE...]
- DELETE: sử dụng từ khóa deleted để tham chiếu đến các cột có dữ liệu mới xóa
DELETE Tên_bảng
OUTPUT deleted.Tên_cột
[INTO Bảng_2
WHERE...]
3. Ví dụ
3.1 Lệnh MERGE
- Tạo bảng EMP chứa các nhân viên của phòng 70 và 90
SELECT Employee_id, First_name, Salary, Department_id
INTO EMP
FROM EMPLOYEES
WHERE Department_id IN(70, 90)
- Trong bảng EMPLOYEES thực hiện các thao tác cập nhật sau
--Đổi sang chữ HOA cột First_name cho các nhân viên phòng 90
UPDATE EMPLOYEES
SET First_name = UPPER(First_name)
WHERE Department_id = 90
--Tăng gấp đôi lương cho các nhân viên phòng 70
UPDATE EMPLOYEES
SET Salary = Salary * 2
WHERE Department_id = 70
- Sử dụng lệnh MERGE để trộn các nhân viên của phòng 70, 90 và 30 từ bảng EMPLOYEES vào bảng EMP
MERGE EMP e2
USING (SELECT Employee_id, First_name, Salary, Department_id
FROM EMPLOYEES
WHERE Department_id IN(70, 90, 30)) e1
ON e1.Employee_id = e2.Employee_id
WHEN MATCHED THEN
UPDATE SET First_name = e1.First_name, Salary = e1.Salary
WHEN NOT MATCHED THEN
INSERT VALUES(e1.Employee_id, e1.First_name, e1.Salary, e1.Department_id);
- Kiểm tra kết quả
3.2 Từ khóa OUTPUT
- Ví dụ thực hiện lệnh UPDATE và kết xuất các dữ liệu liên quan ra màn hình
UPDATE EMPLOYEES
SET Salary = Salary * 1.1
OUTPUT inserted.Employee_id, inserted.Salary AS New_sal, deleted.Salary AS Old_sal
Xem thêm: lênh thêm dữ liệu INSERT, lệnh sửa dữ liệu UPDATE, lệnh xóa dữ liệu DELETE, lệnh xóa toàn bộ dữ liệu trong bảng TRUNCATE TABLE.