آموزش Merge Statement

🔸 merge statement

در این بخش قصد دارم به معرفی و شناخت قابلیت های دستور merge بپردازم

👈 دستور merge از مجموعه دستورات DML است
👈 دستورات DML وظیفه تغییر در داده های جداول را به عهده دارند
👈 دستورات DML شامل دستور insert ، update ، delete و merge هستند

در چه مواقعی میتوانیم از دستور merge استفاده کنیم ؟
✔️ هرگاه نیاز باشد تا بین دو مجموعه رکورد عملیات دسته ای insert یا update انجام دهیم میتوانیم از دستور merge استفاده کنیم
✔️ اگر نیاز داریم با استفاده از خروجی یک پرس و جو (select) جدولی را update کنیم میتوانیم از دستور merge استفاده کنیم

برای شرح کاربرد دستور merge لطفا به مثال زیر دقت نمایید 👇👇👇👇
✳️فرض کنید جدولی با نام emp_manager وجود دارد که شامل ستون های شناسه ، نام ، نام خانوادگی و حقوق مدیران است و شامل داده هایی به شکل زیر میباشد 👇👇👇👇

میخواهیم اطلاعات دو جدول employees و جدول emp_manager را بر اساس کسب و کار زیر در جدول emp_manager با هم ترکیب شوند؟
🖍اگر کارمندی در هر دو جدول employees و emp_manager وجود داشت حقوق آن در جدول emp_manager به اندازه 1 دلار افزایش یابد
🖍اگر کارمندی در جدول emp_manager وجود نداشت به جدول emp_manager اضافه شود

❇️❇️❇️❇️ برای حل این سوال دو روش وجود دارد
1️⃣ استفاده از دو دستور update و پس از آن insert
2️⃣ استفاده از دستور merge

1️⃣ استفاده از دو دستور update و پس از آن insert 👇👇👇👇👇

update emp_manager em
set em.salary = em.salary + 1;

insert into emp_manager
select e.employee_id , e.first_name , e.last_name , e.salary
from employees e
where e.employee_id not in (select employee_id from emp_manager);

2️⃣ استفاده از دستور merge
نحوه نگارش دستور merge به صوورت زیر میباشد 👇👇👇👇

merge into نام جدول مقصد
using (select | نام جدول مبداء)
on (شرطی که وجود هر سطر از جدول مبداء با مقصد را بررسی میکند)

when matched then
insert | update
when not matched then
insert | update;

❇️پاسخ سوال فوق با استفاده از دستور merge به شکل زیر میباشد ❇️

merge into emp_manager tbl_dest
using (select * from employees) tbl_source
on (tbl_dest.employee_id = tbl_source.employee_id)
when matched then
update set tbl_dest.salary = tbl_dest.salary + 1
when not matched then
insert
values
(tbl_source.employee_id,
tbl_source.first_name,
tbl_source.last_name,
tbl_source.salary);

✳️✳️✳️ نکات دستور merge 👇👇👇👇

✅ همانطور که مشاهده میکنید میتوان برای جدول مقصد و جدول مبداء نام مستعار تعریف کرد (tbl_dest و tbl_source)

✅ برای جدول میداء میتوان از نام یک جدول یا یک دستور select استفاده کرد ، بدیهی است که میتوان از تمام قابلیت های دستور select در این بخش استفاده کرد به عنوان مثال میتوانید از where ، group by ، having ، window functions ، recursive query و … استفاده کنید

✅ بخش when matched هنگامی اجرا میشود که شرط on برقرار باشد ، بر اساس کسب و کار مورد نظر میتوان در این بخش از دستور insert یا update استفاده شود

✅ بخش when not matched هنگامی اجرا میشود که شرط on برقرار نباشد باز هم میتوانید از یکی از دستورات insert یا update استفاده کنید

✅ وجود یکی از بخش matched یا not matched اجباری است ، نیازی به استفاده از هر دوی آنها نیست

✅ میتوانید از دستور merge برای به روز رسانی جدول مقصد با استفاده از یک پرس و جو استفاده کنید ، در این حالت فقط بخش when matched وجود خواهد داشت

merge into نام جدول مقصد
using (select …. )
when matched then
update ….;

✅ نحوه نگارش دستورات insert و update موجود در دستور merge کمی متفاوت است ، در بخش های matched و not matched به نام جدولی که میخواهیم داده های آن را درج یا اصلاح کنیم اشاره نشده است ، در دستور merge نام جدول هدف بعد از کلمه into مشخص میشود و نیازی به تکرار نام جدول هدف در هر کدام از بخش ها بصورت جداگانه نیست.

دانلود فایل pdf

دیدگاهتان را بنویسید