"

دستور MERGE در SQL

تیم تحریریه 1403/12/11 0 175
لینک کوتاه http://zoheirsoftware.com/z/647d1efef |
دستور MERGE در SQL,مزایای استفاده از MERGE,ساختار دستور MERGE

MERGE در پایگاه داده SQL

دستور MERGE در SQL برای انجام عملیات INSERT، UPDATE و DELETE به‌صورت ترکیبی روی یک جدول استفاده می‌شود.

این دستور معمولاً زمانی کاربرد دارد که بخواهیم داده‌های یک جدول را با داده‌های یک منبع دیگر (مانند یک جدول دیگر یا یک کوئری) هماهنگ کنیم.

MERGE ابتدا بررسی می‌کند که آیا رکوردهای منبع در جدول مقصد وجود دارند یا نه؛ اگر وجود داشته باشند، عملیات UPDATE انجام می‌شود، اگر وجود نداشته باشند، رکورد جدید INSERT می‌شود و در صورت نیاز، امکان DELETE کردن رکوردهای اضافی نیز وجود دارد.

ساختار MERGE از USING برای تعیین منبع داده، ON برای مشخص کردن شرط تطابق، و WHEN MATCHED یا WHEN NOT MATCHED برای تعیین عملیات استفاده می‌کند.

برای مثال، در یک سیستم مدیریت مشتریان، می‌توان از MERGE برای به‌روزرسانی اطلاعات مشتریانی که قبلاً ثبت شده‌اند و افزودن مشتریان جدید استفاده کرد:

MERGE INTO Customers AS target  
USING NewCustomers AS source  
ON target.CustomerID = source.CustomerID  
WHEN MATCHED THEN  
    UPDATE SET target.Name = source.Name, target.Email = source.Email  
WHEN NOT MATCHED THEN  
    INSERT (CustomerID, Name, Email) VALUES (source.CustomerID, source.Name, source.Email);


این دستور ابتدا بررسی می‌کند که آیا CustomerID در جدول Customers وجود دارد یا نه؛ در صورت وجود، اطلاعات مشتری به‌روزرسانی می‌شود و در غیر این صورت، یک رکورد جدید اضافه می‌شود.

MERGE در پایگاه داده SQL

مزایای استفاده از MERGE در سی شارپ

  • افزایش کارایی

    به جای اجرای چندین دستور INSERT، UPDATE و DELETE، تنها یک بار از MERGE استفاده می‌شود.
  • کاهش پیچیدگی کد

    کدهای SQL کوتاه‌تر و خواناتر می‌شوند.
  • بهینه‌سازی عملکرد

    کاهش تعداد پرس‌وجوها باعث افزایش سرعت اجرا و بهینه‌سازی عملکرد پایگاه داده می‌شود.
  • مدیریت بهتر داده‌ها

    اطمینان از صحت و یکپارچگی داده‌ها در هنگام همگام‌سازی اطلاعات.

 

 

مزایای استفاده از MERGE در سی شارپ

ساختار دستور MERGE

ساختار کلی دستور MERGE در SQL به صورت زیر است:

MERGE INTO <جدول مقصد> USING <جدول منبع>ON <شرط تطابق>WHEN MATCHED THEN    UPDATE SET <ستون‌ها = مقدارها>WHEN NOT MATCHED THEN    INSERT (<ستون‌ها>) VALUES (<مقدارها>);

توضیحات دستورات:

  • MERGE INTO <جدول مقصد>

    تعیین جدولی که داده‌ها در آن درج یا به‌روزرسانی می‌شوند.
  • USING <جدول منبع>

    تعیین جدول یا داده‌های مرجع برای مقایسه.
  • ON <شرط>

    تعیین شرطی که تعیین می‌کند آیا رکوردها در هر دو جدول مطابقت دارند یا نه.
  • WHEN MATCHED THEN UPDATE SET

    زمانی که رکورد در هر دو جدول وجود دارد، مقادیر مشخص‌شده به‌روزرسانی می‌شوند.
  • WHEN NOT MATCHED THEN INSERT

    اگر رکورد در جدول مقصد وجود نداشته باشد، یک رکورد جدید درج می‌شود.

 

 

 

🌟 آیا می‌خواهید به یک متخصص پایگاه داده تبدیل شوید و در دنیای فناوری اطلاعات بدرخشید؟

با دوره آموزشی SQL Server ما، شما می‌توانید به راحتی و با روشی عملی، تمام مهارت‌های لازم را یاد بگیرید!

این دوره به شما آموزش می‌دهد که چگونه داده‌ها را به بهترین شکل مدیریت کنید، گزارش‌های قدرتمند بسازید و به تحلیل‌های عمیق دست یابید.

با محتوای جذاب و پروژه‌های واقعی، شما نه تنها تئوری را یاد می‌گیرید، بلکه توانایی‌های عملی خود را نیز تقویت می‌کنید.

پس فرصت را از دست ندهید! همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده شغلی روشن‌تر بردارید!

 همین حالا شروع کنید و به دنیای داده‌ها بپیوندید!

 

 

مثال‌های عملی از MERGE در SQL

  • همگام‌سازی داده‌ها بین دو جدول

    فرض کنید دو جدول Customers_New (داده‌های جدید مشتریان) و Customers (جدول اصلی مشتریان) داریم. هدف این است که اطلاعات جدید را در جدول Customers درج کرده یا در صورت وجود، آن‌ها را به‌روزرسانی کنیم.
MERGE INTO Customers AS TargetUSING Customers_New AS SourceON Target.CustomerID = Source.CustomerIDWHEN MATCHED THEN    UPDATE SET Target.Name = Source.Name,               Target.Email = Source.EmailWHEN NOT MATCHED THEN    INSERT (CustomerID, Name, Email)    VALUES (Source.CustomerID, Source.Name, Source.Email);

توضیح این مثال:

    • مقایسه رکوردها بر اساس CustomerID در دو جدول.
    • اگر مشتری در هر دو جدول وجود داشت، اطلاعات نام و ایمیل به‌روزرسانی می‌شود.
    • اگر مشتری در جدول مقصد (Customers) وجود نداشت، رکورد جدیدی درج می‌شود.
  • حذف داده‌ها با MERGE

    گاهی لازم است که هنگام همگام‌سازی داده‌ها، برخی رکوردها که در جدول مقصد وجود دارند ولی در منبع نیستند، حذف شوند.
MERGE INTO Customers AS TargetUSING Customers_New AS SourceON Target.CustomerID = Source.CustomerIDWHEN MATCHED THEN    UPDATE SET Target.Name = Source.Name,               Target.Email = Source.EmailWHEN NOT MATCHED THEN    INSERT (CustomerID, Name, Email)    VALUES (Source.CustomerID, Source.Name, Source.Email)WHEN NOT MATCHED BY SOURCE THEN    DELETE;

تفاوت این مثال با مثال قبلی:
در اینجا اگر رکوردی در جدول Customers_New وجود نداشته باشد، آن رکورد از جدول Customers حذف می‌شود.

 

نکات مهم برای بهینه‌سازی MERGE

  • استفاده از Indexes

    افزودن ایندکس روی فیلدهای کلیدی مانند CustomerID می‌تواند باعث افزایش سرعت اجرای MERGE شود.
CREATE INDEX IDX_Customers_CustomerID ON Customers(CustomerID);
  • جلوگیری از Duplicate Records

    قبل از اجرای MERGE، بررسی کنید که داده‌های تکراری در جدول منبع وجود نداشته باشند.
SELECT CustomerID, COUNT(*)FROM Customers_NewGROUP BY CustomerIDHAVING COUNT(*) > 1;
  •  استفاده از OUTPUT Clause برای Debugging

    برای بررسی تأثیر اجرای MERGE می‌توان از OUTPUT استفاده کرد.
MERGE INTO Customers AS TargetUSING Customers_New AS SourceON Target.CustomerID = Source.CustomerIDWHEN MATCHED THEN    UPDATE SET Target.Name = Source.Name,               Target.Email = Source.EmailWHEN NOT MATCHED THEN    INSERT (CustomerID, Name, Email)    VALUES (Source.CustomerID, Source.Name, Source.Email)OUTPUT $action, inserted.*, deleted.*;

این دستور نمایش می‌دهد که چه رکوردهایی INSERT، UPDATE یا DELETE شده‌اند.

با استفاده از این راهنما، می‌توانید از دستور MERGE برای بهبود عملکرد پایگاه داده خود استفاده کنید و داده‌های خود را به‌صورت کارآمد مدیریت کنید.

 

نکات مهم برای بهینه‌سازی MERGE


مثال پروژه محور از دستور MERGE در SQL

دستور MERGE در SQL برای ادغام داده‌ها از دو جدول مختلف به کار می‌رود.

این دستور می‌تواند برای مقایسه داده‌های یک جدول با داده‌های یک جدول دیگر و انجام عملیات‌هایی مثل INSERT، UPDATE و DELETE استفاده شود.

در اینجا یک مثال پروژه محور برای دستور MERGE آورده شده است:

پروژه: مدیریت موجودی محصولات

فرض کنید که یک پایگاه داده برای مدیریت موجودی محصولات دارید و دو جدول به نام‌های Products و ProductUpdates دارید.

جدول Products شامل اطلاعات اصلی محصولات است و جدول ProductUpdates شامل بروزرسانی‌های جدیدی است که باید به جدول Products اعمال شوند.

جدول‌ها به صورت زیر تعریف شده‌اند:

CREATE TABLE Products (

    ProductID INT PRIMARY KEY,

    ProductName VARCHAR(100),

    Quantity INT

);





CREATE TABLE ProductUpdates (

    ProductID INT,

    ProductName VARCHAR(100),

    Quantity INT

);

سناریو

جدول ProductUpdates ممکن است حاوی تغییرات در موجودی محصولات باشد که باید به جدول Products اعمال شود.

حالا می‌خواهیم داده‌های جدید را ادغام کنیم.

استفاده از دستور MERGE

 

MERGE INTO Products AS P

USING ProductUpdates AS PU

ON P.ProductID = PU.ProductID

WHEN MATCHED THEN

    UPDATE SET P.Quantity = P.Quantity + PU.Quantity

WHEN NOT MATCHED BY TARGET THEN

    INSERT (ProductID, ProductName, Quantity)

    VALUES (PU.ProductID, PU.ProductName, PU.Quantity)

WHEN NOT MATCHED BY SOURCE THEN

    DELETE;

توضیحات:

  • MERGE INTO Products AS P: هدف ادغام داده‌ها در جدول Products است.
  • USING ProductUpdates AS PU: داده‌ها از جدول ProductUpdates به کار گرفته می‌شوند.
  • ON P.ProductID = PU.ProductID: شرط مقایسه برای تطبیق داده‌ها بر اساس ProductID است.
  • WHEN MATCHED THEN UPDATE: اگر محصول در هر دو جدول وجود داشته باشد، موجودی در جدول Products به روز رسانی می‌شود.
  • WHEN NOT MATCHED BY TARGET THEN INSERT: اگر محصول در جدول Products وجود نداشته باشد، یک رکورد جدید به جدول اضافه می‌شود.
  • WHEN NOT MATCHED BY SOURCE THEN DELETE: اگر محصول در جدول ProductUpdates وجود نداشته باشد، رکورد مربوطه از جدول Products حذف می‌شود.
دوره های مرتبط
آموزش Sql,آموزش sqlserver, آموزش جامع Sqlserver

آموزش پایگاه داده SqlServer

پایگاه داده Sqlserver یکی از پایگاه داده های مهم برای ذخیره اطلاعات محسوب میشود .

997,000 تومان

3.2k بازدید

ارسال دیدگاه

برای ارسال نظر لطفا ورود یا ثبت نام کنید.