logo

SQL MERGE-sats

SQL MERGE-sats kombinerar FÖRA IN , RADERA , och UPPDATERA uttalanden i en enda fråga.

inorder genomgång av binärt träd

MERGE-sats i SQL

MERGE-satsen i SQL används för att utföra infogning, uppdatering och radering på en måltabell baserat på resultaten av JOIN med en källtabell . Detta tillåter användare att synkronisera två tabeller genom att utföra operationer på en tabell baserat på resultat från den andra tabellen.



MERGE-satsen jämför data mellan en källtabell och en måltabell baserat på angivna nyckelfält. Den utför lämpliga åtgärder som att infoga nya poster, uppdatera befintliga och ta bort eller flagga poster som inte längre finns i källan.

Detta uttalande ger ett flexibelt sätt att hantera dataändringar och används ofta i scenarier som underhåll Långsamt ändrade dimensioner ( SCD ) i SLUT TILL target_table
ANVÄNDER source_table
PÅ merge_condition
NÄR MATCHAD DÅ
UPPDATERA SET kolumn1 = värde1 [, kolumn2 = värde2 …]
NÄR INTE MATCHAT DÅ
INFOGA (kolumn1 [, kolumn2 …])
VÄRDEN (värde1 [, värde2 …]);

Exempel på SQL MERGE-sats

Anta att det finns två tabeller:



  • PRODUKTLISTA vilket är tabellen som innehåller aktuell information om de tillgängliga produkterna med fälten P_ID, P_NAME och P_PRICE som motsvarar ID, namn och pris för varje produkt.
  • UPPDATERAD_LISTA vilket är tabellen som innehåller den nya informationen om de tillgängliga produkterna med fälten P_ID, P_NAME och P_PRICE som motsvarar ID, namn och pris för varje produkt.

två bord


Uppgiften är att uppdatera detaljerna för produkterna i PRODUCT_LIST enligt UPDATED_LIST.

Lösning



För att förklara detta exempel bättre, låt oss dela upp exemplet i steg.

Steg 1: Känn igen TARGET- och SOURCE-tabellen

Så i det här exemplet, eftersom det ombeds att uppdatera produkterna i PRODUCT_LIST enligt UPDATED_LIST, kommer därför PRODUCT_LIST att fungera som TARGET och UPDATED_LIST kommer att fungera som SOURCE-tabellen.

mål- och källtabell

Steg 2: Identifiera operationerna som ska utföras.

Nu som det kan ses att det finns tre missmatchningar mellan TARGET- och SOURCE-tabellen, vilka är:

1. Kostnaden för KAFFE i TARGET är 15.00 medan det i SOURCE är 25.00

latexmatris
 PRODUCT_LIST 102 COFFEE 15.00   UPDATED_LIST 102 COFFEE 25.00>

2. Det finns ingen BISCUIT-produkt i SOURCE men den är i TARGET

 PRODUCT_LIST 103 BISCUIT 20.00>

3. Det finns ingen CHIPS-produkt i TARGET men den finns i SOURCE

 UPDATED_LIST 104 CHIPS 22.00>

Därför måste tre operationer göras i TARGET enligt ovanstående avvikelser. Dom är:

1. UPPDATERING

102 COFFEE 25.00>

2. DELETE operation

jämför med sträng
103 BISCUIT 20.00>

3. INSERT operation

104 CHIPS 22.00>

Steg 3: Skriv SQL-frågan

De SQL-fråga att utföra de ovan nämnda operationerna med hjälp av MERGE uttalande är:

SQL
/* Selecting the Target and the Source */ MERGE PRODUCT_LIST AS TARGET  USING UPDATE_LIST AS SOURCE   /* 1. Performing the UPDATE operation */  /* If the P_ID is same,   check for change in P_NAME or P_PRICE */  ON (TARGET.P_ID = SOURCE.P_ID)  WHEN MATCHED   AND TARGET.P_NAME  SOURCE.P_NAME   OR TARGET.P_PRICE  SOURCE.P_PRICE  /* Update the records in TARGET */  THEN UPDATE   SET TARGET.P_NAME = SOURCE.P_NAME,  TARGET.P_PRICE = SOURCE.P_PRICE    /* 2. Performing the INSERT operation */  /* When no records are matched with TARGET table   Then insert the records in the target table */  WHEN NOT MATCHED BY TARGET   THEN INSERT (P_ID, P_NAME, P_PRICE)   VALUES (SOURCE.P_ID, SOURCE.P_NAME, SOURCE.P_PRICE)  /* 3. Performing the DELETE operation */  /* When no records are matched with SOURCE table   Then delete the records from the target table */  WHEN NOT MATCHED BY SOURCE   THEN DELETE /* END OF MERGE */>

Produktion:

 PRODUCT_LIST P_ID P_NAME P_PRICE 101 TEA 10.00  102 COFFEE 25.00 104 CHIPS 22.00>

Så på detta sätt kan vi utföra alla dessa tre huvudsatser i SQL tillsammans med hjälp av MERGE-satsen.

Notera: Alla andra namn än mål och källa kan användas i MERGE-syntaxen. De används bara för att ge dig en bättre förklaring.

Viktiga punkter om SQL MERGE-sats

  • SQL MERGE-satsen kombineras FÖRA IN , UPPDATERING , och RADERA operationer till en enda sats, vilket möjliggör effektiv datasynkronisering mellan käll- och måltabeller.
  • Det ger flexibilitet vid anpassning av komplexa SQL-skript genom att hantera flera datamanipuleringsoperationer i en enda transaktion.
  • SQL MERGE-satsen används ofta i scenarier som att underhålla Slowly Changing Dimensions (SCD) i datalager.
  • Korrekt indexering, optimerade kopplingsvillkor och filtrering av källtabellen för nödvändiga poster kan optimera prestandan för MERGE-satsen.